どうもおはようポテト(@ohayoupoteto22)です。
先日、Heroku上のPostgreSQLをSequelizeを用いて色々いじいじしていた時にエラーに遭遇し、丸一日ほど格闘した末になんとか退治できたので
自分の備忘録も兼ねて、その解決に至るまでにとった方法をまとめたいと思います。
ブログ主
お品書き
no pg_hba.conf entry for hostの原因
SequelizeConnectionErrorとの遭遇
今回はddabというフレームワークを使い、簡単なチャットボットを作ろうとしていました。
Heroku createし、postgresのアドオンを作り終え、「$ heroku config」でホスト名云々の情報を取得して終わり!あとは同人誌でも読もう!
なんて悠長に構えていましたが、いざ実行してみると…
丘people!?
「SequelizeConnectionError」…??
「no pg_hba.conf entry for host」…??
なになに…要はデータベースに接続できてないと…?なら
ブログ主
const Sequelize = require('sequelize');
const sequelize = new Sequelize(
'データベース名',
'ロール名',
'パスワード',
{
host: 'ホスト名',
dialect: 'postgres'
}
);
データベース名やロール名とか別に間違えてないんだけどなぁ…
なので「no pg_hba.conf entry for host」的な感じでGoogle先生で検索してみると…
「/var/lib/pgsql/data/pg_hba.confをいじいじすればOKだぜベイベー」とあったので、その通りにいじいじしてあげましたが…
どうもエラー君は僕のことが好きなようで。
くるみ
原因はSSL絡みだった
しかし肝心な事はエラーメッセージの最後にちゃんと載ってました。
「SSL off」…??
SSLってアレでしょ暗号化的な…「https」にする的な。
という事で調べたところ…
SSL接続を有効にしてあげればよいとのことでした。
SSL ofやno pg_hba.conf entry for hostの対処法
結論
とっとと結論から。
const sequelize = new Sequelize(
'データベース名',
'ロール名',
'パスワード',
{
host: 'ホスト名',
dialect: 'postgres',
dialectOptions: {//以下を追加
ssl: {
require: true,
rejectUnauthorized: false
}
}
});
以上のように変更してあげるとエラー君は成仏してくれました。やったぜ。
ブログ主
余談
dialectOptions: {
ssl: true
}
上記のようにSSLをtrueにするだけで解決した、みたいなのも調べたところありましたが
ブログ主の場合はこの方法だとエラーのままでした。アーメン。
まとめ
以上、PostgreSQLでSSL ofやno pg_hba.conf entry for hostとエラーが出た時の対処法でした。「$ heroku pg:credentials:url」を叩いてデータベースを確認したり、herokuのアプリを作り直したり…
色々遠回りしてきましたが無事に解決できてよかったと胸を撫で下ろしています
くるみ