warn(prisma-client) Already 10 Prisma Clients are actively runningの対処
TL;DR
new PrismaClient()
を複数回書いてる可能性があるので、
root直下でlibのようなファイルを作り、そこで、PrsimaClientのインスタンスを1度だけ生成し、そこからimportする形で、PrismaClientのインスタンスを使用すれば解決。
概要
Prismaを使用している時、
warn(prisma-client) Already 10 Prisma Clients are actively running
というメッセージがコンソールに表示されることがある。
本番Build時にこの箇所が原因で、DBのコネクション数の制限のエラーになることがある。
前提
Node.js: 14.16
TypeScript: 4.2.3
ts-node: 9.1.1
prisma: 2.18.0
@prisma/client: 2.18.0
原因
new PrismaClient()
を複数回書いてると発生する。
PrismaClientのインスタンスは、1つずつDBへのコネクションを持ってるので、newするたびに、DBへのコネクションを貼ってしまい、DBへのコネクション数の制限にひっかかるよう。
対応方法
PrsimaClientのインスタンスを1度だけ生成し、その生成したPrismaClientのインスタンスをimportして使用すると解決する。
例)
root直下にlibというdirectoryを作成し、
その中でprsima.tsを作成、PrismaClientのインスタンスを生成し、export
する
// /lib/prisma.ts
import { PrismaClient } from '@prisma/client'
export const prisma = new PrismaClient()
prismaのインスタンスを使いたい時は直接newするのではなく、つまり、currentUser.tsでPrismaClientのインスタンスを生成するのではなく、lib/prisma.ts
からimportして使用する。
// /user/currentUser.ts
import { prisma } from 'lib/prisma'
export const currentUser = (userId: string) => {
return prisma.findUnique({
where: { id: userId },
})
}
参考
Discussion