当部署通过乘客或杂种的Rails你运行应用程序的多个实例。 什么是最好的做法或模式,建立共享资源互斥,如写入本地文件或远程文件。 我要确保两个进程不会同时写入同一资源。
Answer 1:
如果你只需要防止多个作家同时从一个文件时,您可以使用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
注意:将解锁电话在ensure
块是很重要的,以防止死锁,如果你已经锁定了该文件后,未捕获的异常被抛出。
Answer 2:
据我所知,在这样的环境中做到这一点的唯一方法是使用基于文件的信号 - 碰锁文件,做你的工作,删除锁文件。 让如果有对文件锁的进程失败。
你也可以有写入到被穿过文件的服务,使应用程序跟服务修改文件,而不是让他们直接修改该文件。
Answer 3:
你可以使用一个后台作业调度程序做实际工作,例如delayed_job的( http://github.com/tobi/delayed_job )。
文章来源: Mutex for Rails Processes