Rails обнаруживает изменения в файлах программно - PullRequest
1 голос
/ 02 августа 2011

Я хотел бы написать метод, который программно определяет, были ли изменены какие-либо файлы в моем приложении rails.Можно ли сделать что-то вроде MD5 всего приложения и сохранить это в переменной сеанса?

Это в основном для развлечения с манифестом кэша.У меня уже есть динамически сгенерированный кеш, и он хорошо работает на производстве.Но в моей среде разработки мне бы хотелось, чтобы идентификатор этого кэша обновлялся всякий раз, когда я что-либо меняю в каталоге приложения (в отличие от каждых 10 секунд, как я сейчас его настраиваю).

Обновление

File.ctime (".") Будет идеальным, за исключением того, что "."не помечается как измененный при изменении более глубоких файлов каталогов.

Имеет ли смысл перебирать все каталоги в "."и сложите ctimes для каждого?

Ответы [ 3 ]

3 голосов
/ 02 августа 2011

Рассматривали ли вы использовать Guard .

Вы можете программно делать что угодно, когда файл в вашем проекте изменяется.

Есть хороший Railscast о это

2 голосов
/ 25 января 2014

Существует простой рубиновый самоцвет, называемый 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
0 голосов
/ 02 августа 2011

File.ctime является ключом. Переберите все файлы и создайте уникальный идентификатор, основанный на сумме всех их ctimes:

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

Работает как шарм, страница пере кэшируется только тогда, когда это необходимо, даже в разработке.

...