我想知道是否有人有任何插件或capistrano配方,通过在部署时构建所有页面缓存的html或在部署发生之前本地“预热”rails应用程序的页面缓存。
我有一些大多数静态网站没有太大变化,如果已经编写了html,它会运行得更快,而不是要求一个访问者访问该网站。
不是自己创造这个(看起来很简单,但它优先级低)它是否已经存在?
答案 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")
答案 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脚本应该非常容易。