Capistrano多级部署到错误的目录

时间:2011-11-21 14:28:33

标签: ruby-on-rails capistrano

我最近更新了我的宝石后,我的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的转变。我不认为它与此有任何关系,因为这只是结帐过程。

4 个答案:

答案 0 :(得分:9)

我在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.rb deploy / 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
祝你好运。希望你已经解决了这个问题!

答案 1 :(得分:0)

那些位于项目中的production.rb和testing.rb在哪里?

确保它们位于config/deploy

之下

答案 2 :(得分:0)

我最终通过将以下内容添加到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) }

答案 3 :(得分:-4)

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

require 'capistrano/ext/multistage'

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