2013-06-19 23 views
1

我有一個指定默認階段的短期多級capistrano腳本(set :default_stage, :staging),但我發現當我在命令行上指定另一個階段時(例如cap production deploy) ,無論是臨時和生產任務運行:在Capistrano中,當我指定非默認階段時,兩個階段都會加載

$ cap production deploy 
    triggering load callbacks 
    * 2013-06-19 06:38:34 executing `staging' 
    * 2013-06-19 06:38:34 executing `production' 

因此,在部署過程會在通過staging.rb指定的位置,這是一個本地倉庫的SCM - 所以它不存在生產服務器,我的部署失敗。

我可以在我的部署腳本中提供一個默認階段,但是當我在命令行中指定另一個階段時沒有加載它嗎?


你可以看到我的部署文件位置:

deploy.rb

set :stages, [:staging, :production] 
set :default_stage, :staging 
require 'capistrano/ext/multistage' 

set :repository, "myrepo" 
set :scm, :git 
set :scm_user, "deploy" 

set :user, "deploy" 
set (:deploy_to) {"/var/www/clu2/#{application}/"} 
set :use_sudo, false 
default_run_options[:pty] = true 

production.rb

set :application, "production" 
set :rails_env, 'production' 
set :deploy_to, "/var/www/myapp/" 
set :branch, 'develop' 

role :app, 'trustedquote.com' 
role :web, 'trustedquote.com' 
role :db, 'trustedquote.com', :primary => true 

staging.rb

set :application, "staging" 
set :rails_env, 'production' 
set :repository, "file:///git/myrepo.git" 
set :local_repository, "file://." 

set :branch, 'develop' 

role :app, 'mylocation' 
role :web, 'mylocation' 
role :db, 'mylocation', :primary => true 
+1

要回答你原來的問題,是的,可以。 你上面的例子看起來有點不同於https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension ... – CDub

+1

哇。我做的改變是使用字符串而不是符號來指定我的階段,而這似乎是我所需要的。謝謝,@CDub。 – JellicleCat

+0

Booya!沒問題 - 很高興幫助!有趣的是,他們不冷漠......任何人,不要忘記回答你自己的問題。 :) – CDub

回答

2

感謝@CDub的輸入。

我deploy.rb改藝名從符號的字符串,並取得了區別:

set :stages, %w[staging production] 
set :default_stage, 'staging'