使用capistrano仅部署到一个角色/服务器

时间:2010-01-19 23:00:09

标签: ruby capistrano

我正在尝试设置多个角色,一个用于直播,另一个用于开发。它们看起来像这样:

role :live, "example.com"
role :dev, "dev.example.com"

但是,当我运行cap deploy时,它会为两个服务器执行。我尝试了以下内容,它总是在两者上执行。

cap deploy live
cap ROLE=live deploy

我错过了什么?我知道我可以编写一个只响应一个角色的自定义任务,但我不想编写一大堆任务只是为了告诉它响应一个或另一个角色。谢谢!

4 个答案:

答案 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

角色旨在在不同的服务器上部署不同的部分,因为它们可以将整个平台部署到一组服务器。