2010-06-17 105 views
13

我试图部署我的导轨应用程序与capistrano,但我在运行我的迁移时遇到了一些麻烦。在我的开发环境中,我只使用sqlite作为数据库,但在我的生产服务器上使用MySQL。在与capistrano部署时在服务器上运行迁移

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

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

这样做最简单的方法是什么?

更新:

这里是我的部署脚本:(我代替我的实际域名与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" 

当我运行帽部署,一切工作正常,直到它试图运行迁移。 这里是我得到的错误:

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

这就是为什么我需要运行从服务器迁移,而不是从我的本地机器。

任何想法?

回答

6

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

而且你有没有在你的部署脚本定义用户:

set :user, "deploy_user_name" 

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

好吧,部署用户名与我的本地用户名相同。另外,当我登录并通过ssh运行迁移时,它工作正常。 – Pandafox 2010-06-17 21:03:46

+0

嗯。其实你发布的错误是在update_code上。我可以只检查一下,你的应用程序实际上是否被称为example.com,你做了cap部署:setup和cap deploy:从你的本地机器检查? example.com只是你在这里隐私的一部分,我接受了吗? – mark 2010-06-17 21:07:41

+0

嘿,是的,我用我的example.com替换了我的真实域名以获得隐私。代码部署到我的服务器就好了,只是capistrano试图在我的本地机器上运行迁移,而不是在服务器上:) – Pandafox 2010-06-17 21:14:26

41

尝试在你的配置/ deploy.rb文件添加

after "deploy", "deploy:migrate" 

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

+0

在我deploy.rb我有bundle_install的任务,所以我使用'后:bundle_install,“部署:迁移”' – 2012-07-04 08:41:55

+1

为我工作。确保您的提交被推送到您的存储库的正确分支,以使其生效。 – scarver2 2013-01-29 15:54:40

+1

@ denis.peplin不管capistrano为你做包吗?我通过SSH卸载了一个gem,它会自动重新安装。 – Besi 2013-07-16 09:43:54