我想使用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)
请注意,我将模板转换为部分,以使其工作