qlita初投稿(ボソッ)
まだまだ初心者なので至らない点があれば、すみません。
その証拠に「?」が付いている部分は用語すら怪しい部分となっております。
※消せないタブ消化と自分用メモ的側面含む
自己紹介すると、業務未経験独学でフロントエンド系への就職を目指しています。
最近はVueをいじっています。(NuxtやWebpackも触りたい)
初めてのexpress+Vueアプリでherokuにデプロイしようと思い、データベースもherokuに付随するHeroku Postgresを使用することにした。合わせる形でSQLもpostgreSQL。
作業し、ローカルでのSQLは成功したがHeroku Postgresに繋げようとするとエラーに。
error: no pg_hba.conf ~~~~~~~~
色々調べるに、「データベースサーバー側でpgモジュール?のpg_hba.confにSSL設定がありません。」というようなエラーらしいのだが、もちろんHeroku Postgresのサーバーファイルなんていじれるはずもない。
更に言えばheroku自体が定期的にインスタンス?が変わりアプリの動いているサーバーが変わるとのこと、(待ち受けするportもheroku指定の環境変数で動かさなければならない。)
少し調べると、「SQLのオプションでSSL通信をオフにすればいい!!」や、
真逆の「SQLを有効化してあげればいい!!」があったので試したが、変わらない。
詳しくは、SSLを有効化してしまうとエラー内容が
error: self signed certificate
になる。
直訳で「SSL証明書が自己証明です。」みたいな。
OFFにするとSSLにしろと言われ、ONにするとちゃんとした証明書持って来いと言われる。ただアプリ動かしたいだけなのに.....
かといってちゃんとした証明書作ってまで動かしたいとは思わなかったので、半ばあきらめていた時にようやく解決した。
----原因はまた単純でsequelizeを使用していないからだった。
素のSQLはherokuは対応していないのか、どこかで専用オプションと言われていた
rejectUnauthorized: false
も効かなかった。
ちょうどexpress勉強に使っていた教本にsequelizeの使用もあったのでSQLを変えるのが少し面倒だったが、やると出来た。
最終的なコード:config.json(Sequelize使うと生成される)
"production": {
"use_env_variable": "DATABASE_URL",
"ssl": true,
"dialectOptions": {
"ssl": {
"require": true,
"rejectUnauthorized": false
}
}
}
あとはごく普通に普通にSequelizeで通信を行う。
モデルの概念が面倒だったが、慣れてしまえば素のSQLより管理は簡単なのかなと思った。
・参考ページ(heroku関連のもの全て):
https://python5.com/q/rkexxice
https://www.366service.com/jp/qa/2e5f350d001278273877ce86e68acecf
https://stackoverflow.com/questions/25000183/node-js-postgresql-error-no-pg-hba-conf-entry-for-host
https://neos21.hatenablog.com/entry/2020/08/05/080000
・Sequelize移行の為の参考
https://qiita.com/KoKeCross/items/144949ba03e5138fc6d5
https://qiita.com/cobot00/items/0bc0da1095e09bcd0d5f
あとがき:初投稿読んでくださりありがとうございました。やはり何かを初めて触る時には変にいじったから初体験するのではなく、まずサンプルのまま動かしてみるのが大事だと強く思いました.....。