我最近更新了我的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。我不认为这与此有任何关系,因为这只是结帐过程。
发布于 2015-09-17 19:56:27
我最终通过将以下代码添加到我的部署/生产.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) }
发布于 2012-10-25 00:33:53
我在Stack Overflow上偶然发现了这一点。这是一个老问题,但既然它被标记为开放,我就试一试。
我认为这可能是Capistrano实例加载方式的范围问题。
我注意到这个语法在production.rb和test.rb文件中不起作用
set :deploy_to, "/var/www/mysite/live"
但这一条是:
set(:deploy_to) { "/var/www/#{application}/live" }
这是一个细微的区别,但我认为真正起作用的是将信息作为Proc块传递,而第一个是作为字符串传递。我有一种不知不觉的怀疑,当Capistrano实例出现时,该字符串不再存在。
这将向我表明,您的加载或要求顺序有问题,因为您应该能够在这些文件中设置部署变量。如果你不能弄清楚它,你可以欺骗和包围部署/production.rb或部署/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
祝好运。希望你已经解决了这个问题!
发布于 2011-11-21 22:36:50
这些production.rb和testing.rb在项目中的什么位置?
确保它们在config/deploy
下。
https://stackoverflow.com/questions/8213376
复制相似问题