【问题标题】:How to run Capistrano task based on environment or server properties?如何根据环境或服务器属性运行 Capistrano 任务?
【发布时间】:2014-04-09 21:54:07
【问题描述】:

我有一个命名空间和命名空间中的几个任务,它们在 deploy:updated 之后运行。这是一个例子:

namespace :myservice do
  task :start do
    on roles(:app) do
      sudo :start, "my/application"
    end
  end
end

我希望其中一项任务仅在特定环境或主机属性上运行。我怎样才能做到这一点?

我希望能够过滤环境,例如:

namespace :myservice do
  task :start do
    on roles(:app), env(:vagrant) do
      sudo :start, "my/application"
    end
  end
end

最好的方法是什么?

【问题讨论】:

  • 你得到答案了吗?
  • 抱歉,我一直不知道如何做到这一点,并且不再与 Capistrano 合作。
  • @pjammer 或许能够验证下面的答案

标签: capistrano capistrano3


【解决方案1】:

似乎 capistrano 多级可以帮助您。 https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension

基本上,您将有一个名为vagrant阶段,您可以在其中定义配置变量,然后由您的主要deploy.rb 脚本引用并执行操作。

这是一个概念性的例子,

# config/deploy/production.rb
set :should_start_my_application, false


# config/deploy/vagrant.rb
set :should_start_my_application, true


# config/deploy.rb
namespace :myservice do
  task :start do
    on roles(:app) do
      if should_start_application then
        sudo :start, "my/application"
      end
    end
  end
end

【讨论】:

  • 感谢您抽出宝贵时间回复我的旧请求。不幸的是,我不再使用 Ruby 和 Capistrano 做任何事情,所以我无法真正测试它。您认为关闭我最初的问题或将其保持打开状态是否有意义?让它无限期地打开我感觉很糟糕,特别是因为我讨厌看到堆栈溢出的相同类型的问题永远挥之不去。
  • 没问题,关闭或打开它都可以——但我不能 100% 确定什么最适合 SO。
  • @pjammer 可能能够验证他上个月提出的答案。
  • 小修正 - 要使用变量 should_start_my_application,我们必须使用 if fetch(:should_start_my_application) then... 在 rake 任务中获取它
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
相关资源
最近更新 更多