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

Sau*_*hah 6 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
Run Code Online (Sandbox Code Playgroud)

我有2个如上所述的任务.现在不是手动运行"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
Run Code Online (Sandbox Code Playgroud)

我怎么做?

Szy*_*Jeż 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
Run Code Online (Sandbox Code Playgroud)

这将满足您的需求.你可以使用像这样的钩子之前和之后钩住这个方法:

before :deploy, :set_deploy_to_location
Run Code Online (Sandbox Code Playgroud)