render_to_string от задачи граблей

Я хочу использовать задачу Граблей кэшировать мою карту сайта так, чтобы запросы на sitemap.xml не возьмет навсегда. Вот то, что я имею до сих пор:

  @posts = Post.all

  sitemap = render_to_string :template => 'sitemap/sitemap', :locals => {:posts => @posts}, :layout => false
  Rails.cache.write('sitemap', sitemap)

Но когда я пытаюсь выполнить это, я получаю ошибку:

undefined local variable or method `headers' for #<Object:0x100177298>

Как я могу представить шаблон к строке из Граблей?

10
задан Tom Lehman 12 April 2010 в 04:04
поделиться

2 ответа

Вот как я это сделал:

  av = ActionView::Base.new(Rails::Configuration.new.view_path)
  av.class_eval do
    include ApplicationHelper
  end

  include ActionController::UrlWriter
  default_url_options[:host] = 'mysite.com'

  posts = Post.all

  sitemap = av.render 'sitemap/sitemap', :posts => posts
  Rails.cache.write('sitemap', sitemap)

Обратите внимание, что я преобразовал свой шаблон в частичный, чтобы это работало

9
ответ дан 3 December 2019 в 23:12
поделиться

Существует сообщение о том, как получить доступ к методам и контексту ActionView :: Base из задачи rake.

Однако это обезьяна. Почему бы не использовать механизм кэширования rails для выполнения кэширования? :)

Позднее редактирование: Функция render_to_string определена в контексте ActionController :: Base.

Ниже приведено решение о том, как заставить его работать из задач rake, взято из omninerd .

# In a rake task:
av = ActionView::Base.new(Rails::Configuration.new.view_path)
Rails.cache.write(
  "cache_var", 
  av.render(
    :partial => "view_folder/some_partial", 
    :locals => {:a_var => @some_var}
  )
)
4
ответ дан 3 December 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: