片段
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
我该怎么做?
答案 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