【问题标题】:@prisma/client did not initialize yet. Please run "prisma generate" and try to import it again@prisma/client 尚未初始化。请运行“prisma generate”并尝试再次导入
【发布时间】:2021-08-17 04:12:01
【问题描述】:

我正在使用 prisma、postgres、docker、kubernets。

npx prisma migrate dev 工作。

npx prisma generate 产生以下输出:

✔ 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

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

我的 docker 文件:

FROM node:alpine

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

CMD ["npm", "start"]

【问题讨论】:

    标签: node.js docker kubernetes prisma


    【解决方案1】:

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

    如果您在 kubernets pod 中,则使用终端访问该 pod,然后发出生成命令

    kubectl exec -it pod_name sh
    npx prisma generate
    

    【讨论】:

      【解决方案2】:

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

      Dockerfile

      # 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

      {
        "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 中运行它。为了使数据库和迁移顺利进行,我运行了一个运行 prisma migrate deploy 的 initContainer。

      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
      

      (这是我刚刚复制并删除了所有非必要内容的实时服务)

      我希望这对某人有用

      【讨论】:

      • 如何为生产运行 prisma 迁移和种子?你刚刚在 Dockerfile 中运行生成
      • 谢谢你,非常有用。但是,您能解释一下为什么要从构建映像中复制 node_modules 吗?这不会用所有开发依赖项覆盖您的精益生产node_modules 并使您的最终图像膨胀吗?
      • @JPLew 你是绝对正确的,那句话不应该在那里。我正在更新我的答案。
      • @markokraljevic 据我所知npx prisma generate 只创建./prisma/generated 目录。所以在 Dockerfile 中包含它是非常有意义的。
      猜你喜欢
      • 2022-07-22
      • 2021-12-28
      • 2021-01-06
      • 2022-08-19
      • 2022-01-24
      • 2022-10-22
      • 2021-11-18
      • 2021-02-12
      • 2021-11-14
      相关资源
      最近更新 更多