首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Prisma实现NextJS应用的文档化

用Prisma实现NextJS应用的文档化
EN

Stack Overflow用户
提问于 2022-01-12 15:40:59
回答 4查看 3.3K关注 0票数 4

我已经创建了一个NextJS应用程序,以连接到我使用Prisma的数据库。当我在电脑上启动应用程序时,一切都正常。不幸的是,当我试图在Docker容器中运行应用程序时,会收到错误消息。可以创建并启动容器。还可以显示应用程序的起始页(还没有数据库查询)。但是,当我单击存在数据库查询的第一页时,会得到错误代码500 -初始服务器错误和控制台中的以下错误消息:

代码语言:javascript
运行
复制
PrismaClientInitializationError: Unknown PRISMA_QUERY_ENGINE_LIBRARY undefined. Possible binaryTargets: darwin, darwin-arm64, debian-openssl-1.0.x, debian-openssl-1.1.x, rhel-openssl-1.0.x, rhel-openssl-1.1.x, linux-arm64-openssl-1.1.x, linux-arm64-openssl-1.0.x, linux-arm-openssl-1.1.x, linux-arm-openssl-1.0.x, linux-musl, linux-nixos, windows, freebsd11, freebsd12, openbsd, netbsd, arm, native or a path to the query engine library.
You may have to run prisma generate for your changes to take effect.
    at cb (/usr/src/node_modules/@prisma/client/runtime/index.js:38689:17)
    at async getServerSideProps (/usr/src/.next/server/pages/admin/admin.js:199:20)
    at async Object.renderToHTML (/usr/src/node_modules/next/dist/server/render.js:428:24)
    at async doRender (/usr/src/node_modules/next/dist/server/next-server.js:1144:38)
    at async /usr/src/node_modules/next/dist/server/next-server.js:1236:28
    at async /usr/src/node_modules/next/dist/server/response-cache.js:64:36 {
  clientVersion: '3.6.0',
  errorCode: undefined
}

我的Dockerfile:

代码语言:javascript
运行
复制
# Dockerfile

# base image
FROM node:16-alpine3.12

# create & set working directory
RUN mkdir -p /usr/src
WORKDIR /usr/src

# copy source files
COPY . /usr/src

COPY package*.json ./
COPY prisma ./prisma/

# install dependencies
RUN npm install

COPY . .

# start app
RUN npm run build
EXPOSE 3000
CMD npm run start

我的船坞-合成人。

代码语言:javascript
运行
复制
version: "3"

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: web
    restart: always
    volumes:
      - ./:/usr/src/app
    ports:
      - "3000:3000"
    env_file:
      - .env

我的package.json:

代码语言:javascript
运行
复制
{
    "name": "supermarket",
    "version": "0.1.0",
    "private": true,
    "scripts": {
        "dev": "next dev",
        "build": "next build",
        "start": "next start",
        "lint": "next lint"
    },
    "prisma": {
        "schema": "prisma/schema.prisma"
      },
    "dependencies": {
        "@prisma/client": "^3.6.0",
        "axios": "^0.22.0",
        "cookie": "^0.4.1",
        "next": "latest",
        "nodemailer": "^6.6.5",
        "react": "17.0.2",
        "react-cookie": "^4.1.1",
        "react-dom": "17.0.2"
    },
    "devDependencies": {
        "eslint": "7.32.0",
        "eslint-config-next": "11.1.2",
        "prisma": "^3.6.0"
    }
}
EN

回答 4

Stack Overflow用户

发布于 2022-01-26 18:53:39

我发现了错误。我认为这是M1芯片的一个问题。我将node:16-alpine3.12更改为node:lts,并将一些命令添加到Dockerfile中,如下所示:

代码语言:javascript
运行
复制
# base image
FROM node:lts

# create & set working directory
RUN mkdir -p /usr/src
WORKDIR /usr/src

# copy source files
COPY . /usr/src

COPY package*.json ./
COPY prisma ./prisma/

RUN apt-get -qy update && apt-get -qy install openssl

# install dependencies
RUN npm install

RUN npm install @prisma/client

COPY . .
RUN npx prisma generate --schema ./prisma/schema.prisma
# start app
RUN npm run build
EXPOSE 3000
CMD npm run start

我希望这也能帮助其他人。

票数 5
EN

Stack Overflow用户

发布于 2022-01-25 17:46:07

我一直有一个类似的问题,我刚刚解决了。

我认为您需要做的是将您的码头文件中的最后一个块更改为

代码语言:javascript
运行
复制
# start app
RUN npm run build
RUN npx prism generate
EXPOSE 3000
CMD npm run start

我想这能解决你的问题。

票数 2
EN

Stack Overflow用户

发布于 2022-01-31 07:55:01

我很幸运这样:

代码语言:javascript
运行
复制
FROM node:17-slim as dependencies


# set working directory
WORKDIR /usr/src/app

# Copy package and lockfile
COPY package.json ./
COPY yarn.lock ./
COPY prisma ./prisma/
RUN apt-get -qy update && apt-get -qy install openssl

# install dependencies
RUN yarn --frozen-lockfile

COPY . .

# ---- Build ----
FROM dependencies as build
# install all dependencies

# build project
RUN yarn build

# ---- Release ----
FROM dependencies as release
# copy build
COPY --from=build /usr/src/app/.next ./.next
COPY --from=build /usr/src/app/public ./public

# dont run as root
USER node

# expose and set port number to 3000
EXPOSE 3000
ENV PORT 3000

# enable run as production
ENV NODE_ENV=production

# start app
CMD ["yarn", "start"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70684374

复制
相关文章

相似问题

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