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