「Deploying Rails」という本を読み進めたところ、capaistrano が db:migrate を呼び出すところに行き詰まりました。
app と db の 2 つの VM をセットアップしました。それぞれが完全に動作しています。VM アプリは nginx/unicorn をホストし、VM データベースは PostgreSQL をホストしています。VM に "vagrant ssh" を実行すると、すべて問題なく動作します。
これは、2 つの VM が定義された私の Vagrant ファイルです (私は 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(ホスト)->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)に接続するにはどうすればよいですか?
どんなヒントでも大歓迎です!ありがとう!