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.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
祝好运。 希望你已经解决了这个问题!
那些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"