2012-09-05 42 views
2

我剛剛按照「部署Rails」一書的方式工作,im卡住了capaistrano調用db:migrate的地方。Vagrant,VirtualBox,Capistrano,db:migrate - 無法連接到服務器

我建立了兩個虛擬機 - app und db - 他們每個人都完全獨立工作。 虛擬機應用程序主機在nginx/unicorn中,VM數據庫ist託管PostgreSQL。 我可以在虛擬機中「流浪ssh」,每件事情都很好。

這是我與定義的兩個虛擬機(我使用的是流浪版本1.0.3)流浪文件:

Vagrant::Config.run do |config| 

    config.vm.define :app do |app_config| 
    app_config.vm.customize ["modifyvm", :id, "--name", "app", "--memory", "512"] 
    app_config.vm.box = "lucid64_rb193_pp2719" 
    app_config.vm.host_name = "app" 
    app_config.vm.forward_port 22, 2200, :auto => true 
    app_config.vm.forward_port 80, 8080 
    app_config.vm.network :hostonly, "33.33.13.37" 
    app_config.vm.share_folder "puppet", "/etc/puppet", "../log4job_ops" 
    end 

    config.vm.define :db do |db_config| 
    db_config.vm.customize ["modifyvm", :id, "--name", "db", "--memory", "512"] 
     db_config.vm.box = "lucid64_rb193_pp2719" 
     db_config.vm.host_name = "db" 
     db_config.vm.forward_port 22, 2201, :auto => true 
     db_config.vm.forward_port 5432, 5432 
     db_config.vm.network :hostonly, "33.33.13.38" 
     db_config.vm.share_folder "puppet", "/etc/puppet", "../log4job_ops" 
    end 
end 

正如你所看到的,發送到8080端口的數據轉發到端口80上的tghe應用程序虛擬機,這工作得很好。

由於PostgreSQL偵聽端口5432,我設置了端口轉發4532(主機) - > 4532(VM)。

然而,運行的是 「上限部署:冷」 時或 「帽部署:遷移」 它收到此錯誤信息(帽部署:遷移):

* executing `deploy:migrate' 
    * executing "ls -x /var/log4job/releases" 
    servers: ["localhost"] 
    [localhost] executing command 
    command finished in 37ms 
    * executing "cd /var/log4job/releases/20120905140228 && bundle exec rake RAILS_ENV=production db:migrate" 
    servers: ["localhost"] 
    [localhost] executing command 
*** [err :: localhost] rake aborted! 
*** [err :: localhost] could not connect to server: Connection refused 
*** [err :: localhost] Is the server running on host "localhost" and accepting 
*** [err :: localhost] TCP/IP connections on port 5432? 
*** [err :: localhost] could not connect to server: Connection refused 
*** [err :: localhost] Is the server running on host "localhost" and accepting 
*** [err :: localhost] TCP/IP connections on port 5432? 
*** [err :: localhost] 
*** [err :: localhost] Tasks: TOP => db:migrate => environment 
*** [err :: localhost] (See full trace by running task with --trace) 
    command finished in 4128ms 
failed: "sh -c 'cd /var/log4job/releases/20120905140228 && bundle exec rake RAILS_ENV=production db:migrate'" on localhost 

問題:

  1. 我究竟做錯了什麼?

  2. 在虛擬機「app」上運行「rake db:migrate」命令。 我假設,因爲項目源代碼被部署到/ var/log4job/releases/20120905140228

  3. 如果我在上面nr 2的假設是正確的,那麼它也不奇怪它沒有工作。 PostgreSQL在虛擬機「db」上運行。但你怎麼設置這種類型的服務呢? 我配置database.yml中的數據庫連接是否有錯誤。

這是database.yml中生產的部分:

production: 
    adapter: postgresql 
    template: template0 
    username: log4jobuid 
    password: log4jobpwd 
    database: wl_prod 
    host: localhost 
    encoding: unicode 
    port: 5432 

舒爾。它說它應該聽取「本地主機」;-)但我如何配置它,連接到其他虛擬機(「數據庫」VM)?

歡迎任何提示! 謝謝!

回答

1

好吧,我明白了!

找到答案的最好方法,就是寫下來的問題;-)

,我都在database.yml中WRE所犯的錯誤

它應該是這樣的:

production: 
    adapter: postgresql 
    template: template0 
    username: log4jobuid 
    password: log4jobpwd 
    database: wl_prod 
    host: 33.33.13.38 
    encoding: unicode 
    port: 5432 

的IP-ADRESS爲 「主持人:」 應該是IP-ADRESS在爲DB VM的流浪文件指出:

db_config.vm.network :hostonly, "33.33.13.38" 

現在我們知道,您可以從例如使用虛擬機的IP地址將一個VM「應用程序」導入另一個VM「db」中。

您還應該聲明,您聲明數據庫的正確數據庫名稱,用戶名和密碼。在我的情況下,我讓木偶創建數據庫,所以我使用兩側相同的設置(現在;-)