Agenda
やりたいこと
Vite x Prismaで ①Dev環境 ②本番環境 で個別に起動できるようにしたい。
①Dev環境はSQLiteを、②本番環境はPostgreSQLを使うようにしたい。
対応
大まかな手順
- envファイル、DB別schemaファイルの作成
- prisma migrateを実行してprisma clientを読み込む
- npm実行時にenvを指定して読み込む
ファイル構造の最終形態
.env
.env.dev
.env.main
package.json
prisma
├── pg
│ ├── migrations
│ │ ├── 20230329081140_
│ │ │ └── migration.sql
│ │ └── migration_lock.toml
│ └── schema.prisma
├── seed.ts
└── sqlite
├── dev.db
├── migrations
│ ├── 20230329080944_
│ │ └── migration.sql
│ └── migration_lock.toml
└── schema.prisma
各ファイルの中身
.env
DATABASE_SQLITE_URL="file:./dev.db"
DATABASE_PG_URL="postgresql://postgres:ooo@ooo.supabase.co:5432/postgres"
.env.dev
# NFT
DOT_UPDATE_AUTHORITY="HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg"
DOT_PFP_COLLECTION="AR9oRpDHsLW4tkb2fgMthaoZGQj9bnKMAoNZ9k9Yuy1K"
.env.prod
# NFT
DOT_UPDATE_AUTHORITY="vir55LvSEGcY55ny876GycLmFCxMXTkoRg7RxDvKiw5"
DOT_PFP_COLLECTION="4BDvhA5emySfqyyTHPHofTJqRw1cwDabK1yiEshetPv9"
package.json(一部抜粋)
"scripts": {
"dev": "nodemon -r dotenv/config app.ts dotenv_config_path=.env.dev",
"prod": "nodemon -r dotenv/config app.ts dotenv_config_path=.env.prod",
},
prisma/pg/schema.prisma(一部抜粋)
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgres"
url = env("DATABASE_PG_URL")
}
prisma/sqlite/schema.prisma(一部抜粋)
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgres"
url = env("DATABASE_SQLITE_URL")
}
起動方法(devの場合)
% npx prisma generate --schema ./prisma/sqlite/schema.prisma
% npm run dev
起動方法(prodの場合)
% npx prisma generate --schema ./prisma/pg/schema.prisma
% npm run prod