1

我想编写一个以编程方式检测我的 rails 应用程序中的任何文件是否已更改的方法。是否可以对整个应用程序执行类似 MD5 的操作并将其存储在会话变量中?

这主要是为了享受缓存清单的乐趣。我已经有一个动态生成的缓存,它在生产中运行良好。但是在我的开发环境中,我希望每当我更改应用程序目录中的任何内容时更新该缓存的 ID(而不是每 10 秒,这就是我现在设置它的方式)。

更新

File.ctime(".") 将是完美的,除了 "." 当更深的目录文件发生更改时,不会将其标记为已更改。

遍历“。”中的所有目录是否有意义?并将每个 ctimes 加在一起?

4

3 回答 3

4

您是否考虑过使用Guard

每当项目中的文件发生更改时,您都可以以编程方式执行任何操作。

关于它有一个很好的railscast

于 2011-08-02T17:16:29.573 回答
2

有一个名为 filewatcher 的简单 ruby​​ gem。这是最高级的例子:

require 'filewatcher'

FileWatcher.new(["README.rdoc"]).watch() do |filename, event|
  if(event == :changed)
    puts "File updated: " + filename
  end
  if(event == :delete)
    puts "File deleted: " + filename
  end
  if(event == :new)
    puts "New file: " + filename
  end
end
于 2014-01-25T15:47:20.467 回答
0

File.ctime 是关键。遍历所有文件并根据它们所有 ctime 的总和创建一个唯一的 id:

cache_id = 0
Dir.glob('./**/*') do |this_file|
   ignore_files = ['.', '..', "log"]
   ignore_files.each do |ig|
       next if this_file == ig
   end
   cache_id += File.ctime(this_file).to_i if File.directory?(this_file)
end

像魅力一样工作,页面仅在需要时重新缓存,即使在开发中也是如此。

于 2011-08-02T17:13:13.240 回答