我想使用Rake任务来缓存我的站点地图,以便对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>
如何将模板从Rake中渲染为字符串?
解决方法
这是我如何做到的:
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)
请注意,我将模板转换为部分,以使其工作