我們使用Capistrano的採用類似的設置。然而,我們遇到了一些問題:
切換到設置後,事情似乎很好,但後來我們開始注意到,在運行cap deploy
後,即使符號鏈接已被更改爲指向頭部即使經過多次刷新並附加了不同的GET參數,瀏覽器仍然會顯示舊頁面。首先,我們認爲它是瀏覽器緩存,所以對於開發,我們通過HTTP頭禁用了瀏覽器緩存,但是這並沒有改變任何東西。然後我檢查了一下,以確保我們沒有進行整頁緩存服務器端,而我們沒有。但是我注意到,如果我刪除了符號鏈接指向的修訂版本中的文件,我們將得到一個404,所以Apache提供了新的頁面,但它仍然遵循「舊符號鏈接」並從上面提供頁面錯誤的目錄。
這是共享主機,所以我無法重新啓動Apache。所以我嘗試刪除符號鏈接並每次創建一個新的。這似乎工作有時,但不可靠。它大概有25〜50%的時間。
最後,我發現,如果I:
- 除去現有符號鏈接(其刪除或重命名它);
- 提出頁面請求,從而導致Apache將試圖解析符號鏈接,但發現它失蹤(導致404)
- 然後創建一個新的符號鏈接到新目錄
它會導致文檔根目錄到大部分時間都會更新。但是,即使這不是完美的,大約有2-5%的時間,當部署腳本運行wget
在重命名舊符號鏈接後立即獲取頁面時,它將返回舊頁面而不是404頁面。
Apache似乎在緩存文件系統,或者當Apache從磁盤上的文件系統讀取時(也許沒有任何意義),mv
命令可能只改變了內存中的文件系統。在任何情況下,我已經採取了別人的建議,運行符號鏈接更改後sync
,它應該得到的文件系統上的磁盤同步記憶,也許是輕微的延遲也將有助於wget
返回一個404
我'm thinking「rm/var/www/html/finalbuild && ln -s/home/user/build4/var/www/html/finalbuild」。您甚至可能不需要重新啓動Apache。 – barrycarter 2010-06-02 17:16:19
謝謝,我已經改變了docroot,並指出它是一個符號鏈接,但Apache似乎沒有聽...我已經成功地重新啓動了Apache,任何想法? – Jorre 2010-06-03 09:35:43
我也一直在試圖爲此找到答案。 Apache只是給了我一個403錯誤。到目前爲止沒有運氣。推測是因爲在生產中這樣做是不好的做法。只是想在我的開發盒上做到這一點。 – nedned 2010-09-22 05:39:34