🍚
FlyPostgresに対してマイグレーションを実行する
Remix を使って個人開発しているyutaです。
Fly.ioにデプロイし、DB はFly Postgresを使っています。
ORM はPrismaを使っています。
マイグレーションを作成して Postgres のテーブルに反映するのにめちゃくちゃ手間取ったので、反映方法を書いておきます(備忘録)。
前提条件
以下の前提条件をクリアしているものとして解説していきます。
- Remix のアプリを Fly.io にデプロイしている(チュートリアル)
- デプロイ時にFly Postgresも作成している
- Prisma をインストールしている(インストール方法)
実行環境
- M1 Macbook Air Ventura 13.0
- node v20.2.0
- npm 9.6.7
結論
Fly Postgres にプロキシ接続した状態でマイグレーションを行います。
以下手順。
- .env に
DATABASE_URL
とを設定します。SHADOW_DATABASE_URL
.env
# DATABASE_URLとSHADOW_DATABASE_URLは同じ
DATABASE_URL="postgres://postgres:パスワード@localhost:5432"
// SHADOW_DATABASE_URL="postgres://postgres:パスワード@localhost:5432"
schema.prisma にSHADOW_DATABASE_URL
を追加
schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
// shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}
※ shadowDatabaseUrl に url と同じ URL を記入すると、npx prisma migrate dev
が失敗します。リンク
- ターミナルで Fly Postgres にプロキシ接続(ドキュメントはこちら)
flyctl proxy 5432 -a <postgres-app-name>
- 別ターミナルを開いてマイグレーションを作成
npx prisma migrate dev --name init
- Fly Postgres に展開
npx prisma migrate deploy
- テーブルが作成されたか確認
以下のコマンドで Fly Postgres の DB に接続できます。
fly postgres connect -a <postgres-app-name>
また、Database Clientを使うと便利です。
この拡張機能を使う場合もflyctl proxy 5432 -a <postgres-app-name>
でプロキシ接続してから DB に接続してください。
最後に
まとめられた記事が見つからなかったので、マイグレーションするのに手間取りました。
皆さんの作業の一助になれば幸いです。
Discussion