2011-06-09 40 views
2

使用Rails 3.0.7和git,使用capistrano進行部署。我使用不同的機器作爲Web和應用程序服務器。我無法將應用程序代碼部署到Web服務器,只有靜態資產 - 基本上是公共/文件夾。僅將靜態資產部署到具有單獨應用程序服務器的Web服務器

這似乎很常見,但沒有運氣尋找最佳實踐。

圍繞capistrano處理這種情況有什麼建立嗎?否則,我想添加任務來創建結構,但scp應用服務器的公共目錄將是解決方案。

回答

0

我想到的最好方法是將scp文件傳輸到Web服務器。

1

因此,我認爲有商業原因,您不能將應用程序部署到其他服務器?

如果沒有,那麼只需部署整個代碼 並將您的Web服務器配置爲僅提供公用文件夾。

(在阿帕奇/乘客CONFIGS將是完全一樣的,你就不會使靜態的服務器上的乘客)

這是唯一的簡單的方法來做到這一點.. 否則你會讓自己頭痛。

不過,我要彌補一個辦法來解決這個問題。 。


如果需要部署只是靜態代碼 那麼我建議你創建兩個倉庫

  1. 的應用程序(如git的@ MYSERVER:app.git
  2. 的靜態文件(如git的@ MYSERVER:static.git)
在您的應用程序

現在包括混帳@ MYSERVER:static.git作爲子模塊安裝在公共/

已經做到了這一點,你應該尋找標準Capistrano的食譜與git的子模塊部署(尤其是我想你想以某種方式存儲子模塊的本地緩存,更新它,然後git submodule init與)

你然後可以有兩個Capistrano的食譜

我建議你看看Capistrano的多級...定義的應用程序和靜態兩個階段

因此,您可以只指定的git @ MYSERVER:app.git作爲存儲庫「應用程序「 和git @ myserver:static.git作爲」靜態「的存儲庫

然後一個簡單的cap app deploy:migrations && cap static deploy應該這樣做。

但請記住這些不會同時發生

+0

感謝您的詳細回覆。業務需求是安全的 - 無需暴露Web服務器上的任何代碼。我選擇編寫自己的規則,手動設置parellel發佈結構,並使用'scp'將應用服務器上的'/ public /'目錄複製到Web服務器。 – aceofspades 2011-06-15 03:55:46

+0

scp可能工作 但你可能會發現使用rsync比ssh更好。 類似於 'rsync -r -h -v -a -e「ssh」deploy/current/public webserver:files/public「 你可以在capistrano 中將其作爲」after:update_code「來運行,但問題在於如果您至少在rsync中沒有使用capistrano的符號鏈接發佈結構 ,如果更改文件的名稱,舊文件將保留在服務器上(假設您使用-a,「存檔」),則管理靜態資產的回滾 「,國旗) – 2011-06-15 06:52:52

1

我也希望有更多的已發佈的慣例。我們已經完成了基於Django書籍的建議,使您的公共應用程序目錄成爲聯網目錄。

這是好得多,因爲只有你的公共目錄是靜態的,scp才能工作。很多應用程序會將內容寫入公共目錄,例如圖像生成即時。這些文件也需要立即複製到Web服務器。

我推薦使用NFS,Samba Share或類似的方法,這樣你的公共目錄實際上只是一個聯網文件夾,所以當你寫入它時,就像是寫入遠程文件夾。

將其整合到Capistrano的,我們做了以下內容: 創建共享/公共

這個網絡文件夾內部署後:update_code:從當前/公共 移動內容共享/公共(覆蓋所需文件) 刪除或重命名當前/公共符號鏈接,然後電流/公衆共享/公共

缺點: *不會刪除舊文件(就像有人前面所說) *沒有真正的回滾選項(除了重新部署舊版本)

相關問題