Closed bntoma closed 2 months ago
追記です。 ビルドが成功しているかのように見えていたのですが、ログを追っていくとDBのマイグレーション実行時に、アドレス解決ができないとのエラーが出ていました。
12 0.874 > fastify-react-sample@1.0.0 build
12 0.874 > npm run db:migrate
12 0.874
12 1.155 npm
12 1.166
12 1.166 > fastify-react-sample@1.0.0 db:migrate
12 1.166 > node db/migrate.mjs
12 1.166
12 1.298 Error: getaddrinfo ENOTFOUND postgres.railway.internal
12 1.298 at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) {
12 1.298 errno: -3008,
12 1.298 code: 'ENOTFOUND',
12 1.298 syscall: 'getaddrinfo',
12 1.298 hostname: 'postgres.railway.internal'
これはこちらの設定ミスによるものか、他でも同様に起こっているのか、確認させていただきたいです。
自己解決しました。 本書と異なる手順を踏んでいるのですが、以下の設定に内容を変更することで、デプロイ時におけるマイグレーションが成功し、無事webappを起動させることができました。 webapp 側の Variables の PGHOST、PGPORT を以下の画像のように、パブリック側の値を入れる必要がありました。
参考情報: Cannot access postgres.railway.internal and Rails build fails on migrate
6章以降の挙動に影響がないか心配なところではありますので、ご確認ください。
@bntoma
{"statusCode":500,"code":"42P01","error":"Internal Server Error","message":"relation "session" does not exist"}
こちらのエラーは、ご指摘の通りマイグレーションが走らなかったために起きています。 マイグレーション処理は、Webappがビルドされる際に実行されます。
https://github.com/tsuemura/fastify-webapp-sample/blob/main/package.json#L10
マイグレーションが走らなかった理由については、ご共有頂いた内容から推察するに、 WebappがPostgresサービスに接続できなかったためではないかと考えられます。
Webapp側のPGHOST及びPGPORTを設定することで上手く行ったとのことでしたが、Railwayにはサービス間でホスト名やポート番号などを参照するための変数が用意されており、これらを Variables に設定した上で再デプロイするとマイグレーションが走るはずです。
書籍ではp.101~102 「環境変数をセットする」で説明しています。一度ご確認頂けますと幸いです。
@bntoma
デプロイしても、アプリのURLが不明であったので、設定の Networking > Public Networking > Generate Domain でurlを取得しました。
こちら、記載漏れのようです。大変失礼しました。
@bntoma
度々すみません。こちらでも現象が再現しました。確認しています。
先の書き込みで示しましたリンク内に:
参考情報: Cannot access postgres.railway.internal and Rails build fails on migrate
Railwayの公式ドキュメントが参照されています:
Private networking is not available during the build phase.
言葉通りに受け取ると、ビルドフェーズにおいてプライベートネットワークが利用できない制限があるのではないかと推察します。
@bntoma
ありがとうございます。恐らくおっしゃるとおりで、プライベートドメイン postgres.railway.internal
はビルド中は使えないはずです。
ただ、以前は(少なくとも2024年6月ごろに確認した時点では) ${{Postgres.PGHOST}}
という環境変数がパブリックドメイン ***.***.rlwy.net
に変換されていたのですが、新たにデプロイしたものからはプライベートドメイン postgres.railway.internal
に変換されるようになっているようなんですね。
そのせいでビルド中のマイグレーションに失敗してしまっているようです。
ワークアラウンドとしては、ご提案いただいたものが有効です。かつ、この状態でも6章以降の内容には差し障りありません。 https://github.com/tsuemura/practical-guide-for-test-automation-support/issues/3#issuecomment-2272407471
ただし、6章ではRailwayの environment 機能を使ってステージング環境(テスト用の環境)を作りますので、そちらでも同様の操作をする必要があります。
この件はRailwayのコミュニティでも聞いてみています。 https://help.railway.app/questions/an-actual-value-of-postgres-pghost-933b8b65
Railwayから回答があり、やはり最近(2024/7/19)に変更があったということでした。 https://railway.app/changelog/2024-07-19-database-private-networking
回避方法は2つあり、1つはRailwayの新しいBuilderを使って頂くことです。これにより、ビルド中にも Private Network が使えるようになるとのことです。
もう一つの方法は、ビルドではなくデプロイの際にマイグレーションをすることです。おそらくこちらのほうが本書の読者の皆さまにとってはシンプルになるはずなので、対応予定です。
お調べいただきありがとうございました。
@tsuemura
初めまして!issue は close 済ですが、情報共有のためコメントを残させて頂きます。
当 issue の事象が同じく発生しましたが、記載頂いている「新しい Builder を使う」方法で、
無事デプロイまで完了し、サンプルアプリ画面も確認できました!
回避方法は2つあり、1つはRailwayの新しいBuilderを使って頂くことです。これにより、ビルド中にも Private Network が使えるようになるとのことです。
初めまして。書籍を購入して、勉強させていただいております。
早速ですが 5-2-3 デプロイする までは手順通りに進めて、ローカル環境でのデプロイではうまく行っておりますが、 5-3-1 サンプルアプリケーションについて ウェブ画面を確認する のところに行きつきません。
とくに Railway.app は初めて触るため、恥ずかしいのですが、ウェブで調べた範囲で解決に至っておりません。 詳細な手順を示していただけると嬉しいです。
以下見当違いかもしれませんが、試してみたことを記しておきます:
デプロイしても、アプリのURLが不明であったので、設定の Networking > Public Networking > Generate Domain でurlを取得しました。
これをクリックして、アプリケーションのページへは遷移したのですが、以下のようなエラーが出ます:
PostgresのDBのマイグレーションの手順が抜けているのかなという印象です。