2010-06-17 149 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

相關問題