Running migration on server when deploying with capistrano

Pandafox picture Pandafox · Jun 17, 2010 · Viewed 18.7k times · Source

I'm trying to deploy my rails application with capistrano, but I'm having some trouble running my migrations. In my development environment I just use sqlite as my database, but on my production server I use MySQL.

The problem is that I want the migrations to run from my server and not my local machine, as I am not able to connect to my database from a remote location.

My server setup: A debian box running ngnix, passenger, mysql and a git repository.

What is the easiest way to do this?

update:

Here's my deploy script: (i replaced my actual domain with example.com)

set :application, "example.com"
set :domain, "example.com"          

set :scm, :git    
set :repository,  "[email protected]:project.git"

set :use_sudo, false

set :deploy_to, "/var/www/example.com" 

role :web, domain
role :app, domain
role :db, "localhost", :primary => true   

after "deploy", "deploy:migrate"

When I run cap deploy, everything is working fine until it tries to run the migration. Here's the error I'm getting:

** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: localhost (Errno::ECONNREFUSED: Connection refused - connect(2))
connection failed for: localhost (Errno::ECONNREFUSED: Connection refused - connect(2)))

This is why I need to run the migration from the server and not from my local machine.

Any ideas?

Answer

Zepplock picture Zepplock · Jun 17, 2010

Try to add

after "deploy", "deploy:migrate"

in your config/deploy.rb file. This will run a migration on your server upon a successful deployment of your project.