1

Railsアプリのファイルが変更されたかどうかをプログラムで検出するメソッドを作成したいと思います。アプリ全体のMD5のようなことをして、それをセッション変数に保存することは可能ですか?

これは主に、キャッシュマニフェストを楽しむためのものです。私はすでに動的に生成されたキャッシュを持っており、それは本番環境でうまく機能します。しかし、私の開発環境では、アプリディレクトリ内の何かを変更するたびにそのキャッシュのIDを更新したいと思います(10秒ごとではなく、現在の設定方法です)。

アップデート

File.ctime( "。")は、"。"を除いて完璧です。より深いディレクトリファイルが変更された場合、変更済みとしてマークされません。

「。」内のすべてのディレクトリを反復処理することは意味がありますか?それぞれのctimesを合計しますか?

4

3 に答える 3

4

Guardの使用を検討しましたか。

プロジェクト内のファイルが変更されるたびに、プログラムで何でも実行できます。

それについての素敵なレールキャストがあります

于 2011-08-02T17:16:29.573 に答える
2

filewatcherと呼ばれる単純なルビーの宝石があります。これは最も高度な例です。

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がキーです。すべてのファイルを反復処理し、すべてのctimesの合計に基づいて一意の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 に答える