部署时“预热缓存”

时间:2009-02-12 23:14:53

标签: ruby-on-rails ruby deployment caching capistrano

我想知道是否有人有任何插件或capistrano配方,通过在部署时构建所有页面缓存的html或在部署发生之前本地“预热”rails应用程序的页面缓存。

我有一些大多数静态网站没有太大变化,如果已经编写了html,它会运行得更快,而不是要求一个访问者访问该网站。

不是自己创造这个(看起来很简单,但它优先级低)它是否已经存在?

4 个答案:

答案 0 :(得分:18)

您可以使用wget或其他程序来抓取该网站。实际上,这种情况被称为其手册页中的一种用法:

  

此选项告诉Wget在完成后删除它下载的每个文件。通过代理预取热门页面非常有用,例如:

   wget -r -nd --delete-after http://whatever.com/~popular/page/
     

-r选项是递归检索,而-nd是不创建目录。

答案 1 :(得分:4)

我使用看起来像这样的rake任务来每晚刷新页面缓存的站点地图:

 require 'action_controller/integration'
 ActionController::Base::expire_page("/sitemap.xml")   
 app = ActionController::Integration::Session.new
 app.host = "notexample.com"
 app.get("/sitemap.xml")

请参阅http://gist.github.com/122738

答案 2 :(得分:2)

以这种方式预加载 - 一般来说,在太平洋时间晚上10点开始并在东部时间早上6点结束的cron作业 - 是一种很好的方法来对网站进行负载均衡。

查看spider_test rails plugin,了解在测试中执行此操作的简单方法。

如果你打算使用上面的wget,添加--level =, - no-parent, - wait = SECONDS和--waitretry = SECONDS选项来限制你的负载,你也可以记录日志并捕获标题响应以进行诊断或分析(如果需要,可以从/ tmp更改路径):

wget -r --level=5 --no-parent --delete-after \
  --wait=2 --waitretry=10  \
  --server-response        \
  --append-output=/tmp/spidering-`date "+%Y%m%d"`.log
  'http://whatever.com/~popular/page/'

答案 3 :(得分:1)

我设置了集成测试,确认网站的所有主要区域都可用(总共几百页)。他们不做任何改变数据的事情 - 只需撤回页面和表格。

当我部署我的生产实例时,我目前没有运行它们,但现在你提到它 - 它实际上可能是一个好主意。

另一种选择是拉出站点地图中显示的每个页面(如果你有一个,你可能应该这样)。编写一个执行该操作的gem / rake脚本应该非常容易。