2012-06-30 23 views
0

我一直在使用Capistrano將幾個Rails應用程序部署到單個EC2實例。這些應用程序都使用Apache + Passenger。部署階段大多數形式如下:通過多個部署階段維護Rails環境

- 提取代碼,在主應用程序目錄的「releases/[timestamp]」子目錄中放置。

- 爲上演發佈

運行打捆 - 運行遷移的上演發佈

- 運行資產編譯( 「資產:預編譯」)耙任務上演發佈

- 重啓delayed_job任務隊列處理守護進程和任何其他後臺進程

- 將分階段發佈符號鏈接到「當前」(乘客Web根目錄)

- 重啓乘客(通過觸摸應用目錄中的「tmp/restart」)

這是一個非常標準的Rails部署過程。我注意到它的一個巨大瓶頸是爲每個需要它的任務加載rails環境。對於我的大型應用程序之一,環境加載需要大約40秒或更長時間,對於需要rails環境的n個任務(運行bundler,migrations,資產編譯,delayed_job守護程序),重複執行n次。原諒如果這是一個天真的問題,但我想知道是否有一種簡單的方法來爲所有這些任務只加載一次環境(最好比將所有這些任務/作業的實現整合到加載的單個rake任務環境)。

回答

0

我建議你看看這個vagrant。這是一種快速簡單的部署方式。它利用chef來定製流浪箱。我想你會想創建你自己的接受者(一個廚師的事情),以擊中你列出的大部分物品。一旦這樣做你很高興去。

+0

[看我的回答] –

0

更新:我最終炮製了我自己的解決方案,這工作正常。我並沒有從shell中單獨運行每個依賴於rails環境的命令(使用Capistrano「run」方法),而是將它們捆綁到一個依賴於rails環境的rake任務中。我之前運行過「rake db:migrate」,然後是「rake assets:precompile」等等,我現在運行一個rake任務,其主體包括「Rake :: Task ['db:migrate']。invoke」和「Rake ::任務[ '資產:預編譯']。調用」。環境現在只能加載一次。