2011-11-21 102 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