首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@prisma/client尚未初始化。请运行"prisma generate“并尝试再次导入它。

@prisma/client尚未初始化。请运行"prisma generate“并尝试再次导入它。
EN

Stack Overflow用户
提问于 2021-05-29 01:03:26
回答 5查看 16.7K关注 0票数 14

我用的是prisma,postgres,码头,kubernet。

npx迁移dev工作。

npx prisma生成的输出如下:

代码语言:javascript
复制
✔ Generated Prisma Client (2.23.0) to ./node_modules/@prisma/client in 68ms
You can now start using Prisma Client in your code. Reference: https://pris.ly/d/client

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()

但是,当我试图在我的路由文件中使用时,会产生错误:

new-route.ts

代码语言:javascript
复制
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

我的码头档案:

代码语言:javascript
复制
FROM node:alpine

WORKDIR /app
COPY package.json .
RUN npm install --only=prod
COPY . .

CMD ["npm", "start"]
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-05-29 01:59:20

在开发过程中,我通常不使用docker,但是每当我在schema.prisma中更改某些内容并不得不使用npx prisma generate时,我都会遇到这个问题。我的解决方案是重新启动运行npm start的节点应用程序。也许,如果您重新启动容器,它可能会工作。

如果您在kubernets内,然后使用终端访问荚,然后发出生成命令。

代码语言:javascript
复制
kubectl exec -it pod_name sh
npx prisma generate
票数 7
EN

Stack Overflow用户

发布于 2021-12-16 09:50:25

我知道这已被标记为已解决,但我只是想分享我的设置,为任何人感兴趣。

Dockerfile

代码语言:javascript
复制
# Build image
FROM node:16.13-alpine as builder
WORKDIR /app

# Not sure if you will need this
# RUN apk add --update openssl

COPY package*.json ./
RUN npm ci --quiet

COPY ./prisma prisma
COPY ./src src
RUN npm run build

# Production image

FROM node:16.13-alpine
WORKDIR /app
ENV NODE_ENV production

COPY package*.json ./
RUN npm ci --only=production --quiet

COPY --chown=node:node --from=builder /app/prisma /app/prisma
COPY --chown=node:node --from=builder /app/src /app/src

USER node

EXPOSE 8080
CMD ["node", "src/index.js"]

package.json

代码语言:javascript
复制
{
  "name": "example",
  "description": "",
  "version": "0.1.0",
  "scripts": {
    "generate": "npx prisma generate",
    "deploy": "npx prisma migrate deploy",
    "dev": "npm run generate && nodemon --watch \"src/**\" --ext \"js,json\" --exec \"node src/index.js\"",
    "build": "npm run generate",
    "start": "npm run build && node build/index.js"
  },
  "prisma": {
    "schema": "prisma/schema.prisma"
  },
  "dependencies": {
    "@prisma/client": "^3.6.0"
  },
  "devDependencies": {
    "@tsconfig/node16": "^1.0.2",
    "@types/node": "^16.11.12",
    "nodemon": "^2.0.15",
    "prisma": "^3.6.0"
  }
}

我在Kubernetes管理这个。为了使数据库和迁移更加顺畅,我运行了一个运行initContainer的prisma migrate deploy

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: EXAMPLE
spec:
  replicas: 1
  selector:
    matchLabels:
      app: EXAMPLE
  strategy:
    rollingUpdate:
      maxSurge: 100%
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: EXAMPLE
    spec:
      containers:
        image: DOCKER_IMAGE
        imagePullPolicy: IfNotPresent
        name: SERVICE_NAME
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP
      initContainers:
      - command:
        - npm
        - run
        - deploy
        image: DOCKER_IMAGE
        imagePullPolicy: IfNotPresent
        name: database-migrate-deploy

(这是一项现场服务,我只是复制并剥去了任何不必要的东西)

我希望这对某些人有用

票数 5
EN

Stack Overflow用户

发布于 2022-10-05 14:57:13

这是另一个解决问题的方法。

由于prisma客户端需要.prisma文件夹,如下图或文档中所示,另一种方法是确保它随代码一起传递。您可以这样做如下。

错误方式:发送生成的文件夹

您可能认为只需将生成的文件包括在图像中,只需将.prisma文件夹的异常规则添加到.dockerignore中(请注意感叹号)。

代码语言:javascript
复制
node_modules/
!nodes_modules/.prisma

但是prisma使用的查询引擎是每个操作系统不同,因此您可能会遇到麻烦。

正确的方法:用图像生成文件

只需在构建命令之前将RUN npx prisma generate添加到您的Dockerfile中即可。这样,文件就会在映像创建过程中生成,而不必在每个容器上运行prisma generate命令。这种方法的缺点是您的码头形象将更大。如果这是一个问题,你可以尝试其他的答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67746885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档