@Prisma/客户端尚未初始化,请运行“Prisma GENERATE”并再次尝试导入

t1rydlwq  于 2022-10-06  发布在  Kubernetes
关注(0)|答案(4)|浏览(540)

我用的是Prisma,Postgres,Ducker,Kubernet。

npx Prisma Migrate dev正在工作。

npx Prisma生成产生低于输出:

✔ 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();

我的码头文件:

FROM node:alpine

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

CMD ["npm", "start"]
gpnt7bae

gpnt7bae1#

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

如果您在kubernet Pod内,则使用终端访问Pod,然后发出生成命令

kubectl exec -it pod_name sh
npx prisma generate
vom3gejh

vom3gejh2#

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

文档文件


# 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"
  }
}

我在库伯内斯负责这项工作。为了使数据库和迁移顺利进行,我运行了一个运行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

(这是我刚刚复制的一项实时服务,并去掉了任何不必要的东西)

我希望这能对某些人有用

kr98yfug

kr98yfug3#

您忘记了复制prisma目录,因为生成Prisma客户端需要schema.prisma文件。您应该复制整个Prisma目录,以防您还需要迁移。

您的最终Docker文件应包含以下内容:

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

iq3niunx4#

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

由于Prisma客户端需要.prisma文件夹,如下图或文档所示,另一种方法是确保它与您的代码一起提供。您可以按如下方式执行此操作。

错误方式:投递生成的文件夹

您可能会认为,只需在您的.dockerignore中添加.prisma文件夹的例外规则,即可将生成的文件包含在映像中(请注意惊叹号)

node_modules/
!nodes_modules/.prisma

但Prisma使用的查询引擎对于每个操作系统都不同,所以你可能会遇到麻烦。

正确方式:使用镜像生成文件

只需在BUILD命令之前将RUN npx prisma generate添加到您的Docker文件中。这样,就可以在创建映像期间生成文件,而不必在每个容器上运行prisma generate命令。这种方法的缺点是您的停靠点图像会更大。如果这是一个问题,您可以尝试使用其他答案。

相关问题