部署时“预热缓存”

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

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

而不是自己创建(似乎很容易,但它优先级低)它是否已经存在?

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

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

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

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

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

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

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

我使用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

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

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

如果你打算使用上面的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/'