使用capistrano部署时在服务器上运行迁移

时间:2010-06-17 20:13:46

标签: ruby-on-rails migration rake capistrano passenger

我正在尝试使用capistrano部署我的rails应用程序,但是我在运行迁移时遇到了一些问题。在我的开发环境中,我只使用sqlite作为我的数据库,但在我的生产服务器上我使用MySQL。

问题是我希望迁移从我的服务器而不是本地计算机运行,因为我无法从远程位置连接到我的数据库。

我的服务器设置: 一个运行ngnix,passenger,mysql和git存储库的debian盒。

最简单的方法是什么?

更新

这是我的部署脚本:(我用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 个答案:

答案 0 :(得分:41)

尝试添加

after "deploy", "deploy:migrate"
config / deploy.rb 文件中的

。这将在您成功部署项目后在您的服务器上运行迁移。

答案 1 :(得分:7)

您是否已将部署用户添加为服务器上的mysql用户?我认为localhost是服务器本身而不是本地机器。

您还没有在部署脚本中定义用户:

set :user, "deploy_user_name"

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