如何根据环境或服务器属性运行Capistrano任务?

And*_*inn 8 capistrano capistrano3

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

namespace :myservice do
  task :start do
    on roles(:app) do
      sudo :start, "my/application"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我喜欢这些任务中的一个只能在特定环境或主机属性上运行.我怎么能做到这一点?

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

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

完成此任务的最佳方法是什么?

Shy*_*ada 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
Run Code Online (Sandbox Code Playgroud)