Capistrano可以根据角色设置变量吗?

时间:2011-01-01 02:38:58

标签: ruby capistrano bundler

我正在尝试使用Capistrano部署到两个不同的角色,两者都使用Bundler,但Bundler命令和标志将不同。是否可以设置特定于角色的变量?要么像:

set :bundle_flags, "--deployment --quiet", :role => "web"

或:

role :web do
  set :bundler_cmd, "--deployment --quiet"
end

当然,这两个选项都不起作用。有没有办法实现这个,或类似的东西?

1 个答案:

答案 0 :(得分:1)

每个角色无法使用自定义变量值。

您可以使用capistrano-ext中的多级扩展程序为您的两个不同角色设置不同的阶段。

如果不同的阶段对您的部署没有意义,您可以编写自己的bundle:install任务并根据角色运行不同的命令

run "bundle --deployment --quiet", :roles => :web
run "bundle --deployment", :roles => :app

如下面的评论所述,如果角色没有定义服务器,这种方法会引发错误。它还将串行运行每个命令。要解决这两个问题,请使用并行帮助程序。

parallel do |session|
   session.when 'in?(:web)', "bundle --deployment --quiet"
   session.when 'in?(:app)', "bundle --deployment"
end