簡體   English   中英

Vagrant,VirtualBox,Capistrano,db:migrate-無法連接到服務器

[英]Vagrant, VirtualBox, Capistrano, db:migrate - could not connect to server

我剛剛完成了《 Deploying Rails》一書的工作,並且卡在了capaistrano稱之為db:migrate的地方。

我已經設置了兩個VM-app und db-它們各自獨立地正常工作。 VM應用程序位於nginx / unicorn中,而VM數據庫則位於PostgreSQL中。 我可以“無用的ssh”進入虛擬機,每件事看起來都不錯。

這是我的Vagrant文​​件,其中定義了兩個VM(我正在使用Vagrant版本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的數據通過應用程序VM轉發到端口80,並且運行良好。

當PostgreSQL偵聽端口5432時,我將端口轉發設置為4532(Host)-> 4532(VM)。

但是,當運行“ cap deploy:cold”或“ cap deploy:migrate”時,它會收到以下錯誤消息(cap deploy:migrate):

  * 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. 是在VM“應用程序”上運行的“ rake db:migrate”命令。 我認為,隨着項目源代碼部署到/ var / log4job / releases / 20120905140228

  3. 如果我在以上第2項的假設是正確的,也就不足為奇了。 PostgreSQL在VM“ db”上運行。 但是,您到底如何設置這種服務? 我是否在database.yml中配置了數據庫連接錯誤。

這是database.yml的生產部分:

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

舒爾。 它說它應該偵聽“ localhost” ;-),但是我如何配置它以連接到另一個VM(“ db” VM)?

任何提示都歡迎! 謝謝!

好,我知道了!

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

我所做的錯誤全部都在database.yml中

它看起來應該像這樣:

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

“主機:”的IP地址應為DB VM的Vagrant文​​件中規定的IP地址:

db_config.vm.network :hostonly, "33.33.13.38"

現在我們知道,您可以使用虛擬機的IP地址將一個虛擬機“ app”連接到另一個虛擬機“ db”。

您還應該確保,聲明數據庫的正確數據庫名稱,用戶和密碼。 就我而言,我讓let創建數據庫,因此我在兩側都使用相同的設置(現在為;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM