如何在capistrano的deploy.rb中设置条件变量

时间:2012-04-03 15:32:05

标签: capistrano

来自deploy.rb的

片段

task :prod1 do
  set :deploy_to, "/home/project/src/prod1"
end

task :prod2 do
  set :deploy_to, "/home/project/src/prod2"
end

我有两个如上所述的任务。现在不是手动运行“cap prod1 deploy”或“cap prod2 deploy”,而是想创建一个任务“prod”,根据服务器上存在的文件来设置所需的“deploy_to”。

类似的东西:

task :prod do
  if (A_FILE_IN_SERVER_EXISTS)
    set :deploy_to, "/home/project/src/prod2"
  else 
    set :deploy_to, "/home/project/src/prod1"
end

我该怎么做?

1 个答案:

答案 0 :(得分:10)

你可以这样做:

task :set_deploy_to_location do
  if capture("[ -f /etc/passwd2 ] && echo '1' || echo '0'").strip == '1'
    set :deploy_to, "/home/project/src/prod2"
  else
    set :deploy_to, "/home/project/src/prod1"
  end
  logger.info "set deploy_to = #{deploy_to}"    
end

这将满足您的需求。您可以使用之前和之后挂钩此方法,如下所示:

before :deploy, :set_deploy_to_location