I’m currently setting up a new production environment for a Rails application which includes multiple, load-balanced application servers (currently only two, but this will increase over time).
I’d like to handle deployment of the app to all these servers in a single command using Capistrano (which I already use for my existing, single server). The only way I can see of doing this is to use capistrano-ext (which I actually already use to deploy to my test and staging environments), by defining a new ‘environment’ for each application server (app1, app2 and so on) and performing a deployment using something like:
cap app1 app2 app3 deploy
Is this the recommended way of doing it or is there a better approach?
Yeah. Capistrano manages multiple servers natively. No need for capistrano ext.
You only need to define multiple roles
By default your tasks will be executed on every server. But you can limit a task to one or some servers only.
Here, the task will be executed only on the app and db roles.
You can do the same with the run method.
The rake db:migrate will be run only on the db server.