Запуск миграции на сервер при развертывании с Capistrano - PullRequest
13 голосов
/ 18 июня 2010

Я пытаюсь развернуть приложение rails с помощью capistrano, но у меня возникают проблемы с выполнением миграций.В моей среде разработки я просто использую sqlite в качестве базы данных, но на своем производственном сервере я использую MySQL.

Проблема в том, что я хочу, чтобы миграция запускалась с моего сервера, а не с локального компьютера, поскольку я неВозможность подключения к моей базе данных из удаленного местоположения.

Настройка моего сервера: Debian Box с запущенным ngnix, passenger, mysql и git-репозиторием.

Какой самый простой способ сделать это?

обновление:

Вот мой сценарий развертывания: (я заменил свой фактический домен на example.com)

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

set :scm, :git    
set :repository,  "git@example.com: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"

Когда я запускаю cap deploy, все работает нормально, пока не попытается запустить миграцию.Вот ошибка, которую я получаю:

** [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)))

Вот почему мне нужно запускать миграцию с сервера, а не с локального компьютера.

Есть идеи?

Ответы [ 2 ]

41 голосов
/ 18 июня 2010

Попробуйте добавить

after "deploy", "deploy:migrate"

в вашем файле config / deploy.rb . Это запустит миграцию на ваш сервер после успешного развертывания вашего проекта.

7 голосов
/ 18 июня 2010

Вы добавили своего развертывающего пользователя в качестве пользователя mysql на сервере?Я считаю, что localhost - это сервер, который ссылается на себя, а не на ваш локальный компьютер.

Также вы не определили своего пользователя в сценарии развертывания:

set :user, "deploy_user_name"

role :web, domain
role :app, domain
role :db, domain, :primary => true 
...