2011-11-21 119 views
16

最近更新我的寶石後,我的capistrano設置出現了一些問題。我有一個生產和分段設置的多級設置。Capistrano Multistage部署到錯誤的目錄

/config/deploy.rb

# setup multistage 
set :stages, %w(testing production) 
set :default_stage, "testing" 
require 'capistrano/ext/multistage' 

/config/deploy/production.rb

# Set deploy path 
set :deploy_to, "/var/www/mysite/live" 
set :rails_env, "production" 

/config/deploy/testing.rb

# Set deploy path 
set :deploy_to, "/var/www/mysite/test" 
set :rails_env, "test" 

問題是,它似乎忽略我的deploy_to設置。它只是部署到默認的/ u/apps/mysite。

我不知道它是否有任何相關性,所有這一切的原因是從apache +乘客轉移到nginx +獨角獸。但我認爲它與此無關,因爲這只是結帳過程。

+1

必須有一個辦法做到這一點,而無需複製每個階段的配置。想法? – thekingoftruth

+0

用解決方案回答你的問題,並接受它,所以它會顯示爲已回答。 – mrbrdo

回答

0

我最終通過添加以下到我的部署/ production.rb和testing.rb解決了這個

set(:deploy_to)   { "/var/www/#{application}/live" } 
set(:releases_path)  { File.join(deploy_to, version_dir) } 
set(:shared_path)  { File.join(deploy_to, shared_dir) } 
set(:current_path)  { File.join(deploy_to, current_dir) } 
set(:release_path)  { File.join(releases_path, release_name) } 
0

位於項目中的那些production.rb和testing.rb在哪裏?

確保它們在config/deploy之下。

+0

是的,他們在/config/deploy/production.rb&testing.rb –

+0

嘗試在設置階段之前需要'capistrano/ext/multistage' – kain

+0

我也嘗試使用set:deploy_to,「/ mypath /#{階段}「在主deploy.rb – kain

9

我在堆棧溢出時偶然發現了這個問題。這是一個古老的問題,但自從它被宣佈爲開放以來,我會給它一個機會。

我認爲這可能是Capistrano實例如何加載的範圍問題。

我注意到這句法不會在production.rb和test.rb文件

set :deploy_to, "/var/www/mysite/live" 

工作,但這個作用:

set(:deploy_to) { "/var/www/#{application}/live" } 

其細微的差別,但我覺得一個該工作實際上是將該信息作爲Proc塊傳遞,而第一個將該信息作爲字符串傳遞。我有一個鬼鬼祟祟的懷疑,即在Capistrano實例出現時,該串不再存在。

這會告訴我,您的加載或需要訂單中的某些內容已關閉,因爲您應該能夠在這些文件中設置部署變量。如果你不能弄清楚,你可能能夠欺騙

Capistrano::Configuration.instance.load do 
    # variables, etc here 
end 

環繞部署/ production.rb部署/ test.rb代碼,肯定會告訴你,這文件未在Capistrano實例的範圍內加載。

還未成年點,但這些文件應該在

config/deploy # relative to your Rails app 

/config/deploy/ # this is an absolute path off of your root folder 

好運。希望你已經解決了這個問題!

+2

set(:deploy_to){「/ var/www /#{application}/live」}'不適用於capistrano 3.x的我得到以下消息'參數的錯誤數量(1爲2)' – czerasz

+0

第3章是一個完整的API重寫IIRC,他們試圖清理遺留代碼庫。該語法將在2中解決工作,但是...... :) – engineerDave

-4

可能只是您的訂單deploy.rb?把上面要求的舞臺佈景

require 'capistrano/ext/multistage' 

# setup multistage 
set :stages, %w(testing production) 
set :default_stage, "testing" 
+4

正如在多級擴展的官方[wiki頁面](https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension)中所述,'require' **必須**在兩個'set'之後。 – asymmetric