2011-12-28 63 views
2

我正在通過使用capistrano從git部署php項目。我目前正在通過一些capistrano任務縮小我的javascript(使用jammit)和css(使用yui)。我看到的問題是我在目標服務器上進行這種縮小,而不是在本地預先部署代碼庫。關注的原因是,我將javascript縮小版從yui切換爲jammit,並且當我的部署服務器已經安裝了它時,不希望在多個生產服務器上安裝這個新的ruby gem。我從anohter開發者那裏繼承了capistrano文件,所以我並沒有100%清楚代碼簽出時的情況,以及何時將其發送到遠程服務器以及我應該掛鉤哪些任務。如何在部署前縮小我的源代碼

我最初的想法是做到這一點before "deploy"但我不知道我會有源代碼可用於採取行動。

回答

1

簡短的回答是「你不要」。該deploy勾調用部署:update_code

部署:update_code,{:除了=> {:no_release =>真}}

複製項目到遠程服務器。這是任何部署的第一階段;將更新的代碼和資產移動到部署服務器。然而,你很少直接調用這個任務;相反,您應該調用deploy’ task (to do a complete deploy) or the更新的任務(如果您想單獨執行「重新啓動」任務)。

您需要確保將scm變量設置爲您使用的源代碼管理軟件(默認爲subversion),並將:deploy_via變量設置爲您要用於部署的策略(默認爲:查看)。

這確實在一個下面一舉:

  1. 結帳代碼
  2. 拉上代碼
  3. 移動代碼到遠程服務器
  4. 清理本地代碼

(根據您的部署設置有一些變化)。

但是, 我能夠利用下載和上傳命令來解決這個問題。

tmp_path = "/tmp/#{release_name}/public" 
download "#{current_path}/public/javascripts", "#{tmp_path}/javascripts/":via => :scp, :recurisve => true 
system "jammit -o #{tmp_path}/javascripts -C#{tmp_path}/javascripts/assets.yml" 
upload "#{tmp_path}/javascripts/common.js", "#{current_path}/public/javascripts", :via => :scp 
system "rm -rf #{tmp_path}" 

我不喜歡它,因爲它不是很乾淨,但它完成了我需要完成的工作。