UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Prisma】実行時にdebian-openssl周りでエラー

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 はコードを実行するプラ​​ットフォームに応じたバイナリターゲットを指定する必要がある

上のエラーメッセージになるnativedebian-openssl-1.1.x については

ドキュメントによるとnativeを指定すると、Prisma Client が現在のOSを検出し、そのOSに対する正しいバイナリ ターゲットを自動的に指定してくれるみたい

www.prisma.io

例えば、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"]
}