![](/img/trans.png)
[英]Error: @prisma/client did not initialize yet. Please run "prisma generate"
[英]@prisma/client did not initialize yet. Please run "prisma generate" and try to import it again
我正在使用 prisma、postgres、docker、kube.nets。
npx prisma 遷移開發工作。
和 npx prisma 生成低於 output 的產品:
✔ 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()
但是當我嘗試在我的路由文件中使用時產生錯誤:
新路線.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"]
我通常在開發時不使用 docker ,但是每次我在schema.prisma
中更改某些內容並且必須使用 npx npx prisma generate
時都會遇到這個問題。 我的解決方案是重新啟動運行npm start
。 也許如果您重新啟動容器,它可能會起作用。
如果您在 kubernets pod 中,則使用終端訪問 pod,然后給出 generate 命令
kubectl exec -it pod_name sh
npx prisma generate
我知道這已被標記為已解決,但我只是想與任何感興趣的人分享我的設置。
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 客戶端需要.prisma
文件夾,如下圖或文檔中所示,另一種方法是確保它與您的代碼一起提供。 您可以按如下方式執行此操作。
你會認為你可以通過將 .prisma 文件夾的例外規則添加到你的.dockerignore
中來將生成的文件包含在圖像中(注意感嘆號)
node_modules/
!nodes_modules/.prisma
但是 prisma 使用的查詢引擎對於每個操作系統都是不同的,所以你可能會遇到麻煩。
只需在構建命令之前將RUN npx prisma generate
添加到您的 Dockerfile。 這樣文件就在鏡像創建過程中生成了,你不必在每個容器上運行prisma generate
命令。 這種方法的缺點是你的 docker 圖像會更大。 如果這是一個問題,您可以嘗試使用其他答案。
您忘記復制prisma
目錄,因為生成 Prisma Client 需要schema.prisma
文件。 您應該復制整個 prisma 目錄,以防您還需要遷移。
您的最終 Dockerfile 應包含以下內容:
WORKDIR /app
COPY package*.json .
COPY prisma ./prisma/
RUN npm install --only=prod
發生此錯誤是因為 docker 沒有安裝devDependencies ,這意味着它沒有選擇Prisma CLI 。
要解決此問題,您可以將prisma CLI package 添加到您的依賴項而不是devDependencies 。 (確保運行npm install之后更新 package-lock.json)
對我來說,我只是在我的package.json
中更改了scripts
下的start
,以便我的應用程序在運行前生成 prisma 類型:
"start": "npx prisma generate && nodemon server.ts"
這對我有用——我只是想把它放在這里,供遇到同樣問題的任何人使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.