症状
ビルド後に実行するとprisma/client
でfindUniqueなどのDBアクセスができなくなる。
構成
/
├prisma/
│ └schema.prisma
└.env
DATABASE_URL = "mysql://{user}:{pass}@{host}:{port}/{db}"
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
みたいな構成の場合のお話。
原因
nuxt dev
やnuxt preview
ではちゃんと動いてたけどなして?
って思って調べてみました。
どうやらNuxt3ではビルド後は.env
を読み込まなくなるかららしいですね。
ただしnuxt preview
のときだけは読み込む。
なのでビルド後はprismaが.envを読み込めずにいたようです。
解決
.output/server/.env
に配置してあげればいいので、ビルド用のnpm scriptを下記のように書き換えれば良さそうです。
"build": "cp node_modules/.prisma/client/package.json node_modules/.prisma && nuxt build && cp .env .output/server/.env",
前半のcp node_modules/.prisma/client/package.json node_modules/.prisma
はそもそもビルドができないための修正。
今回の事象は後半のcp .env .output/server/.env
で対応。
これでyarn build && yarn start
で無事prisma/client
でDBへアクセスできるようになりました。