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

Pan*_*fox 13 migration rake capistrano ruby-on-rails 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)))

这就是我需要从服务器而不是从本地计算机运行迁移的原因.

有任何想法吗?

Zep*_*ock 41

尝试添加

after "deploy", "deploy:migrate"
Run Code Online (Sandbox Code Playgroud)

config/deploy.rb文件中.这将在成功部署项目后在您的服务器上运行迁移.


mar*_*ark 7

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

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

set :user, "deploy_user_name"

role :web, domain
role :app, domain
role :db, domain, :primary => true 
Run Code Online (Sandbox Code Playgroud)