2

本番アプリケーションを heroku にデプロイしました。

以下を使用して、問題なくステージング データベースにアクセスできます。

heroku pg:psql --app staging-app

しかし、本番環境で同じことをしようとすると:

heroku pg:psql --app production-app

接続タイムアウトが発生し、ホスト xxx がポート 5432 でリッスンしていないというエラーが表示されます。

heroku Web サイトにアクセスして本番データベースの設定を取得すると、それがホスト上で実行されていることが示されますyyy(つまり、 ではありません xxx)。pg:psql コマンドを正しいホストに接続する方法を誰か教えてもらえますか?

Web サーバーは問題なくデータベースに接続しているようです。実行すると、次のようになります。

heroku run --app production-app rails console

次に、ActiveRecord を介してデータベース内のレコードを表示できます。

ところで、コマンド:

heroku pg:info --app production-app

次の結果が得られます。

=== HEROKU_POSTGRESQL_MAROON
Plan:        Dev
Status:      available
Connections: 0
PG Version:  9.1.5
Created:     2012-08-08 17:55 UTC
Data Size:   5.9 MB
Tables:      0
Rows:        0/10000 (In compliance)
Fork/Follow: Unavailable

=== SHARED_DATABASE (DATABASE_URL)
Data Size: 600k
4

1 に答える 1

5

どうやら正しいコマンドは次のとおりです。

heroku pg:psql HEROKU_POSTGRESQL_MAROON --app production-app

したがって、データベース名と--appパラメーターの両方が必要です (何らかの理由で、私が遭遇したこのコマンドの実行例はすべて、どちらか一方を実行しましたが、両方は実行しませんでした)。

SHARED_DATABASE データベースが存在するため、アプリケーションが指定されている場合でもデータベース名が必要であると推測しています (このデータベースはステージング アプリには存在しません)。

ところで、私がこの問題の解決策を見つけたのは、現在非推奨になっている heroku gem を使用していて、無効なホストに接続しようとして 60 秒後にタイムアウトする代わりに、heroku ツールベルトに切り替えたときに、実際にやや有用なメッセージ:

 !    Unknown database. Valid options are: HEROKU_POSTGRESQL_MAROON_URL, SHARED_DATABASE

_URL(データベース名からその部分を削除するのに十分な知識が必要なので、私はそれをやや有用と評価しています。)


アップデート:


アプリケーションをデプロイしようとしrake db:setupたときに、postgres データベースではなく共有データベースを使用していたため、これらのものが正しく機能していないことがわかりました。

共有データベースのプロビジョニングを解除しました ( https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres#3-deprovision-your-shared-databaseを参照)。それを行った後、手動で DATABASE_URL を HEROKU_POSTGRESQL_MAROON_URL と同じになるように設定する必要がありました (ドキュメントはそれが自動的に行われることを暗示しているようですが、私の場合はそうではありませんでした)。

これでコマンドを実行できます

heroku pg:psql --app production-app

問題なく、そして最も重要なことは、私の rake タスクが正しいデータベースで動作することです。

これが他の誰かに役立つことを願っています。

于 2012-10-30T22:14:57.340 に答える