有没有简单的方法来重新生成Rails页面缓存?销毁缓存很容易:重新生成Rails缓存
Person.each.all do |person|
expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
end
这将删除公用目录中的缓存文件。在我摧毁它们之后,我想重新创建它们。我不想等到他们在公共网站上查看。
有没有简单的rails这样做的方法。
非常感谢
有没有简单的方法来重新生成Rails页面缓存?销毁缓存很容易:重新生成Rails缓存
Person.each.all do |person|
expire_page(:controller => 'yql', :action => 'feed', :id => person.id)
end
这将删除公用目录中的缓存文件。在我摧毁它们之后,我想重新创建它们。我不想等到他们在公共网站上查看。
有没有简单的rails这样做的方法。
非常感谢
更好的解决方案是过期页面,然后使用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的唯一解决方案。注意比赛条件也是重要的。
要缓存它,你必须渲染它,来渲染它,你必须要求它。如果没有请求,我认为你不能这样做。你总是可以用Rails创建一个,但看起来很麻烦,或者你可以有一个外部的过程,像curl
或Ruby curb
库。
你确定你必须这样做吗?
所以,备案,这里就是我所做的:
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是昂贵的。这真的需要在半夜完成。 – superluminary
听起来像一些'cron'和'curl'可以完成这项工作。 – tadman
问题在于,通过外部API(非常有限的控制),提要非常迅速地(比它们生成的速度快)被点击。我需要饲料准备好,或者它超载我的应用程序,我的数据库摔倒了。其实,我想我可能有一个解决方案...... – superluminary