Prismaを導入してローカルでの確認ができたのでAppEngineにデプロイして動作確認したところエラーが発生した
Prisma Client could not locate the Query Engine for runtime "debian-openssl-1.1.x".
This happened because Prisma Client was generated for "debian-openssl-3.0.x", but the actual deployment required "debian-openssl-1.1.x".
Add "debian-openssl-1.1.x" to `binaryTargets` in the "schema.prisma" file and run `prisma generate` after saving it:
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "debian-openssl-1.1.x"]
}
調べたところ、これはPrismaが利用しようとしているOpenSSLのバージョンがOSのバージョンと一致していないことが原因とわかった
binaryTargetsに何か指定しろとのことなので、どうすべきか調べる
バイナリターゲット
Prisma Client はコードを実行するプラットフォームに応じたバイナリターゲットを指定する必要がある
上のエラーメッセージになるnativeとdebian-openssl-1.1.x については
ドキュメントによるとnativeを指定すると、Prisma Client が現在のOSを検出し、そのOSに対する正しいバイナリ ターゲットを自動的に指定してくれるみたい
例えば、macOSの2つのバージョン違い(Intel x86 と ARM64)を自動に検知してくれるので指定しておくと良さそう
次に、debian-openssl-1.1.xはデプロイするOSに応じて指定するもの
Linux debian系であれば以下から選択する
https://www.prisma.io/docs/orm/reference/prisma-schema-reference#linux-debian-x86_64
なので、AppEngineにデプロイするOSを調べる必要がある
OSバージョン
AppEngineにデプロイするDokerイメージはgcr.io/distroless/nodejs:18を使っている
ちょっと古いようで全く同じイメージについては調べられなかったが以下をみると、debian11かdebian10を使っていそうということがわかった
distroless/nodejs at main · GoogleContainerTools/distroless · GitHub
先ほどのPrismaの表と照らし合わせるとdebian-openssl-1.1.xを指定すれば良いことがわかった
ということで、schema.prismaに以下を記述したら無事に動いた
generator client { provider = "prisma-client-js" binaryTargets = ["native", "debian-openssl-1.1.x"] }