用于Rails进程的互斥锁

Mic*_*enn 5 mutex ruby-on-rails

通过Passenger或Mongrel部署Rails时,您运行了多个应用程序实例.在共享资源上建立互斥锁的最佳实践或模式是什么,例如写入本地文件或远程文件.我想确保两个进程不会同时写入同一个资源.

rco*_*der 14

如果您只需要阻止多个编写器同时处理文件,您可以使用该File#flock方法从每个进程请求独占写锁:

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
Run Code Online (Sandbox Code Playgroud)

注意:ensure如果在锁定文件后抛出未捕获的异常,则将解锁调用放入块中对于防止死锁非常重要.