Mutex for Rails Processes

前端 未结 3 1086
遇见更好的自我
遇见更好的自我 2021-01-03 02:22

When deploying Rails via Passenger or Mongrel you have multiple instances of the application running. What is the best practice or pattern to establish a mutex on shared res

3条回答
  •  轮回少年
    2021-01-03 02:45

    If you just need to prevent multiple writers from working with a file simultaneously, you can use the File#flock method to request an exclusive write lock from each process:

    fh = File.new("/some/file/path")
    begin
      fh.flock(File::LOCK_EX)
      # ... write to the file here, or perform some other critical operation
    ensure
      fh.flock(File::LOCK_UN)
    end
    

    Note: putting the unlock call in an ensure block is important to prevent deadlock if an uncaught exception is thrown after you've locked the file.

提交回复
热议问题