2009-02-12 47 views
17

我在想,如果任何人有任何插件或capistrano食譜,將通過在部署時建立所有頁面緩存的html來「預熱」rails應用的頁面緩存或者在部署發生之前本地進行。部署時的「熱身緩存」

我有一些主要是靜態的網站,並沒有太大的變化,並且如果html已經寫好了,而不是要求一個訪問者訪問該網站,它會運行得更快。

而不是自己創建(看起來很簡單,但它lowwwww優先)它已經存在嗎?

回答

1

我已經設置了集成測試,確認網站的所有主要區域都可用(總共幾百頁)。他們不會做任何會改變數據的事情 - 只需將頁面和表單拉回即可。

當我部署我的生產實例時,我目前沒有運行它們,但現在您提到它 - 它實際上可能是一個好主意。

另一種方法是拉出出現在站點地圖中的每一頁(如果有的話,你可能應該這樣做)。編寫一個可以做到這一點的gem/rake腳本應該很容易。

18

你可以使用wget或其他程序來蜘蛛網站。實際上,在手冊頁中提到了這種情況:

此選項告訴Wget在完成此操作後刪除它下載的每個文件。這對於通過代理預取熱門頁面非常有用,例如:

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

-r選項是遞歸檢索,而-nd不創建目錄。

+0

是的,我們在部署腳本中有一些curl請求,不僅是爲了加熱緩存,而且也是爲了讓服務器啓動並運行(例如,對nginx +乘客的第一次請求可能需要40秒左右) – tardate 2011-10-06 16:32:42

2

預加載這種方式 - 通常,使用cron作業在太平洋時間晚上10點開始,並在東部時間早上6點結束 - 這是一種很好的方式來平衡您的網站。

檢查出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/' 
4

我用耙子任務,看起來像這樣刷新我的網頁網站地圖緩存每天晚上:

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

+0

我更喜歡使用rails的方法。例如,一般情況下,由於流氓頁面抓取,我禁用了wget作爲我的所有頁面的客戶端。 – dc10 2016-11-12 16:13:01