TypeormからHerokuのPostgressに繋ぐときに色々と詰まったところ

Version情報

おおよそ2022年9月ごろ時点のお話

"pg": "^8.8.0",
"typeorm": "^0.3.9"

heroku/7.63.0 wsl-x64 node-v14.19.0

error no pg_hba.conf entry for host

どういうタイミングで出力されていたかは定かじゃないが、error no pg_hba.conf entry for hostというエラーがでてアプリが立ち上がらなかった。

ssl: trueだけだと今度はself signed certificateと表示されエラーとなった。

参考になったサイト

github.com

sslの設定のほかにrejectUnauthorized: falseの設定が必要だったようだ(これで本当にいいのかはちょっとわからんが。。。)

ssl: trueにすると今度はローカルでのテスト時に影響があったので僕は以下のような形にしてみた。本番環境ではNODE_ENVをprodcutionにするということを前提があるので注意。

  const option: DataSourceOptions = {
    ...
-   ssl: false,
+   ssl: process.env.NODE_ENV === "production",
+   extra:
+     process.env.NODE_ENV === "production"
+       ? { ssl: { rejectUnauthorized: false } }
+       : undefined,
    ...

syntaxerror: cannot use import statement outside a module

migration:runを実施するタイミングでsyntaxerror: cannot use import statement outside a moduleというエラーが出た。エラー吐くタイミングで落ちるので当然アプリとして立ちあらがず。

参考になったサイト

dev.classmethod.jp

typescriptで開発していると起きうるケースのようだ。ビルド後のマイグレーションファイル(js)を読みにいくように設定する必要があるとのこと。ts-nodeの設定を変えて解決する方法もあるようだ。

qiita.com

syntaxerror: cannot use import statement outside a module typeormぐぐるとたくさん出てくるので参考にしてみてほしい。

www.google.com

僕はこういう風に変えた

  const option: DataSourceOptions = {
    ...
    migrations: [
      __dirname + "/migrations/**/*.ts",
+     __dirname + "/migrations/**/*.js",
    ],
    ...