Capistrano配置

时间:2010-02-01 21:29:08

标签: 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'])

3 个答案:

答案 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 deployENV['CAPDEV']

答案 2 :(得分:0)

Eli,

是的,您可以进行封面分段部署。在部署文件的顶部执行此操作。

set :deploy_env,  ARGV[0].to_sym

如果您愿意,可以不带符号。但请注意,这可能需要一个简单的环境,如运行

cap -vT