有没有一种简单的方法来重新生成Rails页面缓存?销毁缓存非常简单:
Person.each.all do |person|
expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
end
这会删除公共目录中的缓存文件。在我摧毁它们之后,我想重新创建它们。我不想等到他们在公共网站上查看。
是否有一种简单的 rails 方法可以做到这一点。
非常感谢
答案 0 :(得分:1)
所以,为了记录,这就是我所做的:
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
简单地渲染Feed并将其写入正确位置的文件。围绕缓存系统我并不高兴,但现在就足够了。
答案 1 :(得分:0)
要缓存它,你必须渲染它,并渲染它,你必须要求它。如果没有请求,我认为你不能这样做。你总是可以从Rails创建一个,但这看起来很混乱,或者你可以有一个外部进程,用curl
或Ruby curb
库来完成它。
您确定必须这样做吗?
答案 2 :(得分:0)
更好的解决方案是使页面过期,然后使用curl命中它。因为curl会生成一个新请求,所以Passenger只需要足够的内存来呈现一个feed。它还避免绕过缓存系统。
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的解决方案。注意竞争条件也很重要。