Как я могу кэшировать страницу вручную в RoR? - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь создать сайт в RoR и включил кэширование для некоторых страниц и действий.Связанная БД может быть недоступна каждый раз, поэтому использование кеша очень необходимо.Поэтому я не могу дождаться, когда кто-то на самом деле посетит страницу, отобразит ее и затем кеширует.Вместо этого я хочу, чтобы все, что может кешировать, кешировалось вручную, программно.Возможно ли это на самом деле или в RoR кэширование полностью автоматическое?

Ответы [ 4 ]

0 голосов
/ 17 декабря 2015

Я сейчас запускаю ручное кэширование и похоже, что вы можете использовать встроенный API плагина actionpack-page_caching , чтобы вручную запускать создание кэша страниц.Вам нужно использовать функцию cache_page(content, path, extension = nil, gzip = Zlib::BEST_COMPRESSION) с атрибутами (посмотрите строку 80 на https://github.com/rails/actionpack-page_caching/blob/master/lib/action_controller/caching/pages.rb).. Здесь я сделал пример действия, которое выполняет итерацию по некоторой коллекции и создает кэш метода "show" для каждого элемента этой коллекции.

def precompile
    @pages = Page.all
    @pages.each do |page|
      @page = page
      cache_page(render_to_string(template: 'pages/show'), url_for(action: :show, id: @page, only_path: true))
    end
    redirect_to '/'
end

Часть моего кода url_for(action: :show, id: @page, only_path: true) не очень чистая, но это первая версия кода, которая работает так, как мне нужно, любой рефакторинг приветствуется. Также этот код будет перезаписывать файл кэша каждыйвремя его запуска без проверки каких-либо изменений или истечения срока действия.

0 голосов
/ 01 июля 2010

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

(*) В хорошем смысле, ленивый, я надеюсь.

0 голосов
/ 01 июля 2010

Проверьте этот плагин page_cache . Похоже, это то, что вам нужно.

0 голосов
/ 01 июля 2010

Ссылка: - Ссылка

class ProductsController < ActionController 
  caches_page :index  
  def index

  end
end 

установите для выполнения кэширования значение true в вашей конфигурации config / Environment / Development.rb

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