Восстановление кеша Rails - PullRequest
0 голосов
/ 21 октября 2011

Есть ли простой способ восстановить кеш страницы Rails? Уничтожить кеш легко:

Person.each.all do |person|
  expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
end

Это удаляет кэшированные файлы в публичном каталоге. Сразу после того, как я их уничтожу, я хочу воссоздать их. Я не хочу ждать, пока они будут просмотрены на общедоступном веб-сайте.

Есть ли простой рельс способ сделать это.

Большое спасибо

Ответы [ 3 ]

1 голос
/ 24 октября 2011

Итак, для справки, вот что я сделал:

def recache
  Person.all.each do |person|
    path = MyApp::Application.config.action_controller.page_cache_directory + yql_feed_path(person)
    FileUtils.mkdir_p(File.dirname(path))
    File.open(path, 'w') do |f|
      f.write(render_to_string :action => 'feed')
    end
  end
  render :text => "re-caching was successful"
end

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

0 голосов
/ 17 ноября 2011

Лучшее решение - истечь страницу, а затем нажать на нее с помощью curl. Поскольку curl генерирует новый запрос, Пассажиру требуется только достаточно памяти для отображения одного канала. Это также позволяет избежать обхода системы кеширования.

def recache
  Person.find_each :batch_size => 100 do |person|
    expire_page( :controller => 'yql', :action => 'feed', :id => person.id )
    system("curl #{yql_feed_url person.id}")
  end
  render :text => "re-caching was successful"
end

Конечно, это решение только для Linux. Также важно следить за условиями гонки.

0 голосов
/ 21 октября 2011

Для кеширования вы должны отрендерить его, а для рендеринга вы должны запросить его.Я не думаю, что вы можете сделать это без запроса.Вы всегда можете сделать один из Rails, но это кажется грязным, или у вас может быть внешний процесс, который делает это с чем-то вроде curl или библиотекой Ruby curb.

Вы уверены, что должны это сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...