我在使用capistrano-ext gem的多级模块时遇到了一些变量范围问题。我目前在config/deploy/staging.rb
。
set(:settings) { YAML.load_file("config/deploy.yml")['staging'] }
set :repository, settings["repository"]
set :deploy_to, settings["deploy_to"]
set :branch, settings["branch"]
set :domain, settings["domain"]
set :user, settings["user"]
role :app, domain
role :web, domain
role :db, domain, :primary => true
我的config/deploy/production.rb
文件类似。这似乎不是很干。理想情况下,我认为我希望deploy.rb文件中包含所有内容。如果在当前阶段设置了变量,那么一切都会非常干净。
更新:我找到了解决方案。
我在deploy.rb
:
def set_settings(params)
params.each_pair do |k,v|
set k.to_sym, v
end
if exists? :domain
role :app, domain
role :web, domain
role :db, domain, :primary => true
end
end
然后我的staging.rb
文件只是set_settings(YAML.load_file("config/deploy.yml")['staging'])
答案 0 :(得分:2)
你使这个过于复杂。
只需将您的公共代码放入deploy.rb文件中:
role :app, domain
role :web, domain
role :db, domain, :primary => true
以及config / deploy / staging.rb,production.rb等文件中与阶段相关的设置。
然后运行cap deploy,就像你说的那样:cap staging deploy
您的stage.rb文件也可以使用公共变量。例如,我的暂存文件只有一行:
设置:deploy_to,“/ var / www /#{domain} _staging”
其余部分在deploy.rb
中答案 1 :(得分:0)
在deploy.rb中尝试CAPDEV='staging' cap deploy
和ENV['CAPDEV']
答案 2 :(得分:0)
Eli,
是的,您可以进行封面分段部署。在部署文件的顶部执行此操作。
set :deploy_env, ARGV[0].to_sym
如果您愿意,可以不带符号。但请注意,这可能需要一个简单的环境,如运行
cap -vT