开发者

Deploy to only one role / server with capistrano

I'm trying to set up multiple roles, one for live, and another for dev. They look like this:

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

When I run cap deploy, however, it executes for both servers. I've tried the following and it always executes on both.

cap deploy live
cap RO开发者_Python百科LE=live deploy

What am I missing? I know I can write a custom task that only responds to one role, but I don't want to have to write a whole bunch of tasks just to tell it to respond to one role or another. Thanks!


Capistrano Multistage is definitely the solution to the example you posted for deploying to environments. In regard to your question of deploying to roles or servers, Capistrano has command-line solutions for that too.

To deploy to a single role (notice ROLES is plural):

cap ROLES=web deploy

To deploy to multiple roles:

cap ROLES=app,web deploy

To deploy to particular server (notice HOSTS is plural):

cap HOSTS=web1.myserver.com deploy

To deploy to several servers:

cap HOSTS=web1.myserver.com,web2.myserver.com deploy

To deploy to a server(s) with a role(s):

cap HOSTS=web1.myserver.com ROLES=db deploy


You can do something like this:

task :dev do
    role :env, "dev.example.com"
end

task :prod do
    role :env, "example.com"
end

Then use:

cap dev deploy
cap prod deploy


Just one more hint: if you use multistage remember to put ROLES constant before cap command.

ROLES=web cap production deploy

or after environment

cap production ROLES=web deploy

If you put as first parameter, multistage will treat it as stage name and replace with default one:

cap ROLES=web production deploy

* [...] executing `dev'
* [...] executing `production'


Try capistrano multistage:

http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

Roles are intended to deploy different segments on different servers, as apposed to deploying the whole platform to just one set of servers.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜