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

时间:2014-04-09 21:54:07

标签: capistrano capistrano3

我在命名空间中有一个命名空间和几个任务,在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

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

似乎capistrano多阶段会帮助你。 https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension

基本上,您将有一个名为vagrant stage ,您可以在其中定义配置变量,然后由主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