[英]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
問題:
我究竟做錯了什么?
是在VM“應用程序”上運行的“ rake db:migrate”命令。 我認為,隨着項目源代碼部署到/ var / log4job / releases / 20120905140228
如果我在以上第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.