我正在尝试设置多个角色,一个用于直播,另一个用于开发。它们看起来像这样:
role :live, "example.com"
role :dev, "dev.example.com"
但是,当我运行cap deploy时,它会为两个服务器执行。我尝试了以下内容,它总是在两者上执行。
cap deploy live
cap ROLE=live deploy
我错过了什么?我知道我可以编写一个只响应一个角色的自定义任务,但我不想编写一大堆任务只是为了告诉它响应一个或另一个角色。谢谢!
答案 0 :(得分:13)
Capistrano Multistage绝对是您发布用于部署到环境的示例的解决方案。关于部署到角色或服务器的问题,Capistrano也为此提供了命令行解决方案。
要部署到单个角色(注意ROLES是复数形式):
cap ROLES=web deploy
部署到多个角色:
cap ROLES=app,web deploy
部署到特定服务器(注意HOSTS是复数):
cap HOSTS=web1.myserver.com deploy
要部署到多个服务器:
cap HOSTS=web1.myserver.com,web2.myserver.com deploy
部署到具有角色的服务器:
cap HOSTS=web1.myserver.com ROLES=db deploy
答案 1 :(得分:3)
您可以这样做:
task :dev do
role :env, "dev.example.com"
end
task :prod do
role :env, "example.com"
end
然后使用:
cap dev deploy
cap prod deploy
答案 2 :(得分:2)
还有一个提示:如果你使用多级,请记住在cap
命令之前将ROLES保持为常量。
ROLES=web cap production deploy
或环境之后
cap production ROLES=web deploy
如果您将第一个参数作为第一个参数,多级会将其视为舞台名称并替换为默认名称:
cap ROLES=web production deploy
* [...] executing `dev'
* [...] executing `production'
答案 3 :(得分:1)
尝试capistrano多级:
http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage
角色旨在在不同的服务器上部署不同的部分,因为它们可以将整个平台部署到一组服务器。