【问题标题】:Can Capistrano set variables based on a role?Capistrano 可以根据角色设置变量吗?
【发布时间】:2011-01-01 02:38:58
【问题描述】:

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

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

或:

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

当然,这两个选项都不起作用。有没有办法做到这一点,或者类似的东西?

【问题讨论】:

    标签: ruby capistrano bundler


    【解决方案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
    

    【讨论】:

    • Multistage 不起作用,因为我已经将它用于不同的部署阶段。此外,像这样将命令以串行方式运行将使它们在一个角色上运行,然后在另一个角色上运行,这可能是也可能不是问题。我相信如果您没有与角色匹配的服务器,它也会引发错误。
    • 你是对的运行方法。我添加了一个关于使用并行助手解决这两个问题的附录。
    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多