Prisma Client本地正常生产环境报错:找不到debian-openssl-3.0.x查询引擎如何解决?
Prisma Client生产环境部署后Query Engine找不到的解决方法
问题描述
本地运行Prisma Client正常,但通过Webpack打包、GitLab Runner部署到Ubuntu 23.10 x64服务器后,触发如下错误:
Invalid
prisma.event.findMany()invocation:
Prisma Client could not locate the Query Engine for runtime "debian-openssl-3.0.x".
此问题通常是因为打包工具未将libquery_engine-debian-openssl-3.0.x.so.node复制到打包产物目录或node_modules/.prisma/client下。
环境信息:
- Ubuntu 23.10 x64
- Node.js 20.10.0
- @prisma/client ^5.8.1
- schema.prisma已配置
binaryTargets = ["native", "debian-openssl-1.1.x", "debian-openssl-3.0.x", "linux-musl", "linux-musl-openssl-3.0.x"] - GitLab CI流程:
npm install→npx prisma generate→npm run build
解决方案
1. 配置Webpack复制Prisma二进制引擎文件
Webpack默认不会处理.so.node这类二进制文件,需借助copy-webpack-plugin将引擎文件同步到打包输出目录:
- 安装插件:
npm install copy-webpack-plugin --save-dev - 修改
webpack.config.js,添加插件配置:const CopyPlugin = require('copy-webpack-plugin'); module.exports = { // 原有配置保留 plugins: [ new CopyPlugin({ patterns: [ // 复制所有Prisma引擎二进制文件 { from: 'node_modules/.prisma/client/*.so.node', to: '[name][ext]' }, { from: 'node_modules/.prisma/client/*.bin', to: '[name][ext]' } ] }) ] };
2. 优化GitLab CI构建流程
确保构建过程中生成的引擎文件被包含在最终产物中:
- 修改
gitlab-ci.yml,添加产物验证步骤:script: - npm install - npx prisma generate - npm run build # 验证引擎文件已复制到Webpack输出目录(假设输出目录为dist) - ls dist/ | grep libquery_engine - 部署时直接上传包含引擎文件的
dist目录到生产服务器,避免在服务器上重新执行npm install或prisma generate。
3. 确认生产服务器文件位置
部署完成后,检查以下路径是否存在目标引擎文件:
- 打包产物的同级目录(如
/var/www/libquery_engine-debian-openssl-3.0.x.so.node) - 服务器项目下的
node_modules/.prisma/client目录
若文件缺失,手动复制构建产物中的引擎文件到对应路径即可。
4. 强制生成对应平台引擎
如果CI环境中prisma generate未生成目标平台引擎,可通过环境变量强制指定:
PRISMA_BINARY_TARGETS="debian-openssl-3.0.x" npx prisma generate
内容的提问来源于stack exchange,提问作者Jagaa
相关产品推荐
相关产品推荐

