Deploy on specific server

67 views
Skip to first unread message

Bolo

unread,
Mar 23, 2007, 3:46:52 PM3/23/07
to Capistrano
Hello

i have 3 servers

role :web, "lamp1, lamp2" #Cluster Production
role :web, "lamp3", #Server Dev

Its possible to deploy my application on lamp3 only or lamp1 and lamp2
only ?

Thanks

dubek

unread,
Mar 28, 2007, 4:02:01 AM3/28/07
to Capistrano
>
> role :web, "lamp1, lamp2" #Cluster Production
> role :web, "lamp3", #Server Dev
>
> Its possible to deploy my application on lamp3 only or lamp1 and lamp2
> only ?

You might try this in your recipe file:

case ENV["TARGET"]
when "prod"


role :web, "lamp1, lamp2" #Cluster Production

when "dev"


role :web, "lamp3", #Server Dev

end

Then run:

TARGET=prod cap deploy

in order to deploy to the production machines, or:

TARGET=dev cap deploy

in order to deploy to the dev machine.

Many people have this kind of situation (usually with 3 environments:
dev, staging and production). Just search the capistrano and rails
groups for "staging" and you'll find all the talks about it... I have
a feeling the Jamis is planning some solution for it in the next big
release. ;-)

Best,
dubek.

Jamis Buck

unread,
Mar 29, 2007, 10:49:36 AM3/29/07
to capis...@googlegroups.com
On Mar 28, 2007, at 2:02 AM, dubek wrote:

> Many people have this kind of situation (usually with 3 environments:
> dev, staging and production). Just search the capistrano and rails
> groups for "staging" and you'll find all the talks about it... I have
> a feeling the Jamis is planning some solution for it in the next big
> release. ;-)

I'm curious why you have that feeling. :) Even more, though, I'm
curious what you think Capistrano ought to do about this. Personally,
I think the case statement is a great solution. Totally fine. What
could Capistrano do that would be cleaner and easier to read than:

case ENV['STAGE']
when "production"
role ....
set ...
...
when "development"
....
...
end

If it is the environment variable that looks klunky you, you can use
capistrano variables instead:

case stage
...
end

And then invoke it like this

cap -S stage=production deploy

- Jamis

Ezra Zygmuntowicz

unread,
Mar 29, 2007, 1:54:44 PM3/29/07
to capis...@googlegroups.com

I have found that the cleanest way to do staging and production
tasks like this is this way:

task :production do
role :web, '65.74.169.199:8192'
role :app, '65.74.169.199:8192'
role :db, '65.74.169.199:8192', :primary => true
end

task :staging do
role :web, '65.74.169.199:8194'
role :app, '65.74.169.199:8194'
role :db, '65.74.169.199:8194', :primary => true
end


Then you can do:

$ cap staging deploy
$ cap production deploy


Cheers-
-Ezra

-- Ezra Zygmuntowicz
-- Lead Rails Evangelist
-- e...@engineyard.com
-- Engine Yard, Serious Rails Hosting
-- (866) 518-YARD (9273)


Jamis Buck

unread,
Mar 29, 2007, 3:10:31 PM3/29/07
to capis...@googlegroups.com
I'd forgotten about that one, Ezra. I really, really like that.

- Jamis

J.F. Groff

unread,
Mar 29, 2007, 10:11:04 PM3/29/07
to Capistrano
Yes, a staging config should be standard in Rails and Capistrano imho.
For safety and laziness, I usually set the defaults to staging at the
top of deploy.rb:

set :rails_env, :staging
set :deploy_to, "/my/app/path/staging"

desc "Production setup"
task :production do
set :rails_env, :production # override :staging default
set :deploy_to, "/my/app/path/production"
end

Then I play with staging via "cap deploy", "cap migrate" and friends.
When all is fine on the staging host, it's time to

cap production deploy_with_migrations

and pray that no migration breaks the precious production db ;-)

Tip of the day: use a dump of your production db as a sample to test
your software and migration procedures on the staging host.

Just my 2 cents,

JFG

Bolo

unread,
Apr 4, 2007, 9:43:38 AM4/4/07
to Capistrano
Thanks you all for your help
Reply all
Reply to author
Forward
0 new messages