我在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’])
最佳答案 你这太过复杂了.
只需将您的公共代码放入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文件也可以使用公共变量.例如,我的暂存文件只有一行:
set:deploy_to,“/ var / www /#{domain} _staging”
其余的是在deploy.rb中