2

「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

質問:

  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)に接続するにはどうすればよいですか?

どんなヒントでも大歓迎です!ありがとう!

4

1 に答える 1

1

はい、分かりました!

答えを見つける最善の方法は、質問を書き留めることです;-)

私が犯したエラーはすべてdatabase.ymlにありました

次のようになります。

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

「host:」の IP アドレスは、DB VM の Vagrant ファイルに記載されている IP アドレスである必要があります。

db_config.vm.network :hostonly, "33.33.13.38"

これで、VM の IP アドレスを使用して、たとえば 1 つの VM "app" から別の VM "db" に接続できることがわかりました。

また、データベースの正しいデータベース名、ユーザー、およびパスワードを記載する必要があります。私の場合、パペットにデータベースを作成させるので、両側で同じ設定を使用します(現在;-)

于 2012-09-05T18:15:34.403 に答える