繁体   English   中英

部署时“预热缓存”

[英]“Warm Up Cache” on deployment

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

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

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

您可以使用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

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

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

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

以这种方式预加载 - 通常是在太平洋时间晚上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/'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM