2017-11-14 13 views
0

Postgresqlデータベースを持つNodejsアプリケーションを配備する際に問題があります。データベースはHeroku自身から来ています(Heroku Postgresアドオン、hobby-dev)。私のアプリはデータベースへの接続を拒否しました。NodeJsアプリケーション用のHeroku Postgresアドオン接続文字列

どこから問題が発生したのかわかりましたが、クリーンな解決策が見つかりませんでした。そして私は何かを誤解させてしまったと思います(私はノードとヘロクを初めて使っています)。 Herokuのは、自動的に私のポートを含む変数DATABASE_CONFIG環境を提供します

:次に

postgres://username:[email protected]:port/databasename 

、私のアプリでPGと接続するためには、私は、接続文字列としてprocess.env.DATABASE_CONFIGを使用しています。私は次のようなことをします:

const client = new Client({ 
    connectionString: connectionString, 
}) 
client.connect() 

これは接続に失敗します。

しかし、この環境変数を使用する代わりに、私はこの接続文字列からポート番号を削除して、それを変更して変更します。

理由はわかりませんが、Herokuがポートを含むこのDATABASE_URLをあなたに提供していて、それを変更できないという問題があります。

私は間違っていましたか?それを避けるためのきれいな解決策はありますか?

(私は私のコードで直接ポートなしDATABASE_CONFIGをハードコーディングされたとして、私がやったことは醜いですので)あなたの助けを

ありがとう!

答えて

0

まず、new Client()の使用を避けます。接続がボトルネックになる可能性があります。代わりに、接続プーリングを使用します。あなたはなぜそれをしたいのかについてもっと深く答えを読むことができますhere

はあなたの直接の問題については、個人的に私は、過去にHerokuののPostgresのデータベースへの接続に問題があったが、ここでは私のために時間の99%動作します(基本的な)典型的なセットアップでいます

let pg = require('pg'); 
if (process.env.DATABASE_URL) { 
    pg.defaults.ssl = true; 
} 

// include an OR statement if you switch between a local dev db and 
// a remote heroku environment 

let connString = process.env.DATABASE_URL || 'postgresql://postgres:[email protected]:localpostgresport/yourlocaldbname'; 
const { Pool } = require('pg'); 

const pool = new Pool({ 
    connectionString : connString 
}); 

を私の最初の推測は、SSLが有効になっていないことと関係があるかもしれないということでしょう。私はそれが私に過去の問題を引き起こしていることを知っています。次に、環境変数としてHerokuがpostgres接続文字列を設定する必要があるため、process.env.DATABASE_URLを使用していることを確認します。

+0

こんにちは、私は問題が何かを理解しました。それは答えの最後の部分です。 DATABASE_URL(ポートを含まない)の代わりにDATABASE_CONFIGを使用していました。私はこれがそれほど簡単ではないと信じられない。ご協力いただきありがとうございます! – macadam

+0

もちろん! Herokuでセットアップすることは時々トリッキーになる可能性があります。私はあなたがそれを把握することができたことをうれしく思っています:) – Mando75

+0

あなたの助けをたくさんありがとう! – macadam

関連する問題