primefaces地读写文件

我想在多个独立的Ruby进程(而不是线程)之间以primefaces方式读取和编写一个文件。

  • 我在atomic_write找到了atomic_write。 这将写入临时文件,然后将其移动到原始文件并设置所有权限。 但是,这不会阻止文件在写入时被读取。
  • 我还没有找到任何atomic_read 。 (文件读取是否已primefaces化?)

我是否需要在读取和写入之前实现我自己检查的单独“锁定”文件? 或者文件系统中是否存在更好的机制,用于将文件标记为“忙”,我可以在任何读/写之前检查?


动机是愚蠢的,但包括在这里是因为你会问这个问题。

我有一个使用Sinatra的Web应用程序,由Thin提供服务(由于其自身原因)使用JSON文件作为“数据库”。 每个对服务器的请求都会读取文件的最新版本,进行必要的更改,并将更改写入文件。

如果我只运行一个服务器实例,那就没问题了。 但是,我正在考虑在Apache反向代理后面运行Thin的多个副本。 这些是离散的Ruby进程,因此可以真正并行运行。

经过进一步的反思,我意识到我真的想做一个read-process-write atomic的行为。 此时我意识到这基本上迫使我一次只处理一个请求,因此没有理由让多个实例运行。 但是,关于primefaces读取和在写入期间阻止读取的好奇心仍然存在。 因此这个问题。

您想在独占模式下使用File#flock 。 这是一个小小的演示。 在两个不同的终端窗口中运行它。

 filename = 'test.txt' File.open(filename, File::RDWR) do |file| file.flock(File::LOCK_EX) puts "content: #{file.read}" puts 'doing some heavy-lifting now' sleep(10) end 

看一下“pstore.rb”(Ruby stdlib)中的transactionopen_and_lock_file方法。

YAML::Store适合我。 因此,当我需要primefaces地读/写时,我(ab)使用它来存储数据作为Hash