Capistrano Multistage部署到错误的目录

我最近更新我的gem后,我的capistrano设置有一些问题。 我有一个多阶段设置,包括生产和分段设置。

/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 + passenger到nginx + unicorn的转变。 我不认为它与此有任何关系,因为这只是结帐过程。

在Stack Overflow上我偶然发现了这一点。 这是一个古老的问题,但由于它被标记为开放,我将试一试。

我认为这可能是Capistrano实例如何加载的范围问题。

我注意到这个语法在production.rb和test.rb文件中不起作用

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

但是这个做了:

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

它有一个微妙的区别,但我认为有效的一个实际上是将信息作为Proc块传递,而第一个将它作为字符串传递。 我有一种偷偷摸摸的怀疑,当Capistrano实例出现时,弦不再存在。

这将向我表明您的负载中有些东西已关闭或需要订单,因为您应该能够在这些文件中设置部署变量。 如果你无法弄明白,你可能会欺骗并围绕deploy / production.rbdeploy / test.rb代码

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

那肯定会告诉你这个文件没有在Capistrano实例的范围内加载。

也是小点,但文件应该在

 config/deploy # relative to your Rails app 

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

祝好运。 希望你已经解决了这个问题!

那些production.rb和testing.rb位于项目中的哪个位置?

确保它们在config/deploy

我最终通过在deploy / 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) } 

可能只是你在deploy.rb中的订单 ? 将要求置于舞台设置之上

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