ruby-on-rails – Capistrano配置

我在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中

点赞