首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将码头连接到PlanetScale

如何将码头连接到PlanetScale
EN

Stack Overflow用户
提问于 2022-09-18 22:30:58
回答 1查看 470关注 0票数 3

摘要

我正在使用Prisma (ORM)运行一个Sveltkit (JS )应用程序,它连接到PlanetScale (MySQL云数据库),没有问题。当我在docker中运行它时,应用程序将安装并运行,但无法连接到PlanetScale。如何允许Docker连接到PlanetScale?

错误

无法获得错误无效的prisma.category.findMany()调用:无法到达aws-eu-west-2.connect.psdb.cloud3306的数据库服务器,请确保数据库服务器在aws-eu-west-2.connect.psdb.cloud3306上运行。

我已经确认了码头可以连接到互联网,但只是有困难连接到PlanetScale数据库。

代码

MySQL连接URI

密码已显示,但在我的.env文件中是正确的

代码语言:javascript
复制
DATABASE_URL='mysql://7m9rl9ecwydgs7d2oobp:********@aws-eu-west-2.connect.psdb.cloud/blog-database?sslaccept=strict'

普里斯马

schema.prisma

代码语言:javascript
复制
generator client {     
    provider = "prisma-client-js"
    previewFeatures = ["referentialIntegrity"]
}

datasource db {
    provider = "mysql"
    url = env("DATABASE_URL")
    referentialIntegrity = "prisma"
}

prisma.ts

辅助函数

代码语言:javascript
复制
import { PrismaClient, type PrismaPromise, type Category } from '@prisma/client'

const prisma = new PrismaClient()

export function findAllCategory(): Promise<Array<Category>> {
    return prisma.category.findMany()
}

Docker

DockerFile

代码语言:javascript
复制
FROM node:18-alpine3.15 AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build && npm prune --production


FROM node:18-alpine3.15 
USER node:node
WORKDIR /app
COPY --from=builder --chown=node:node /app/build ./build
COPY --from=builder --chown=node:node /app/node_modules ./node_modules
COPY --chown=node:node prisma .
COPY --chown=node:node package.json .
COPY --chown=node:node .env .
ENV PORT 5050
EXPOSE 5050
CMD ["node", "build"]

码头命令

代码语言:javascript
复制
docker build . -t sveltekit:alpine
docker run -d -p 5050:5050 --name sveltekit-app sveltekit:alpine

Docker运行时没有问题,但在转到http://localhost:5050时会显示错误

更新

我已经按照建议将环境变量移到了docker命令中。

我尝试了以下操作,但是错误仍然是一样的。

环境

我还将环境变量更改为:

代码语言:javascript
复制
DATABASE_URL='mysql://7m9rl9ecwydgs7d2oobp:pscale_pw_6KmIc1RUngdwn3sURKzxfDe3Oo7GM0NFeoATFxxNSAG@aws-eu-west-2.connect.psdb.cloud/blog-database?sslaccept=strict&connect_timeout=300'

正如其他条款所建议的。

Dockerfile

我还进行了更新,以包含所有文件和相同的ca-certificate.crt,以检查是否所有环境都是相同的,并提高了版本,因为一些源有16的问题:

代码语言:javascript
复制
FROM node:17-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
RUN npm i mysql
COPY . .
RUN npx prisma generate
RUN npm run build

FROM node:17-alpine 
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/build ./build
COPY package.json .
COPY prisma ./prisma
COPY . .
COPY ca-certificates.crt /etc/ssl/certs/

EXPOSE 3000
ENTRYPOINT ["node", "build"]

从Docker运行MySQL CLI

根据我从这篇文章中收到的评论,我将mysql和mysql安装在我的对接箱上。

代码语言:javascript
复制
mysql -h aws-eu-west-2.connect.psdb.cloud -u 7m9rl9ecwydgs7d2oobp -p************* --ssl-ca=
/etc/ssl/cert.pem

下面的命令成功运行,并且我能够成功地访问我的PlanetScale数据库。然而,prisma仍然抛出了错误。--它们都使用相同的URI和端口.

解决办法

在刷新多次之后,我能够加载页面,但是它是非常断断续续的,再次刷新会再次导致错误。当我不使用码头时,我没有这个问题。

EN

回答 1

Stack Overflow用户

发布于 2022-10-01 15:27:29

经过长时间的搜索,我找到了一个包含一些解决方案的github问题页

将我的停靠文件更新到节点:16.15-阿尔卑斯(与我的Ubuntu子系统完全相同的节点版本),并将其与以前尝试的修复结合起来,将'connection_timeout=300'添加到my中,解决了这个问题,并提出了一些注意事项。

Dockerfile

代码语言:javascript
复制
FROM node:16.15-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build

FROM node:16.15-alpine 
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/build ./build
COPY package.json .
COPY prisma ./prisma
COPY .env /app/.env

EXPOSE 3000
ENTRYPOINT ["node", "build"]

.env

代码语言:javascript
复制
DATABASE_URL='mysql://7m9rl9ecwydgs7d2oobp:pscale_pw_6KmIc1RUngdwn3sURKzxfDe3Oo7GM0NFeoATFxxNSAG@aws-eu-west-2.connect.psdb.cloud/blog-database?sslaccept=strict&connect_timeout=300'

注意事项

Prisma在启动码头后的初始负载上失败,但刷新解决了这一问题。第一次重新加载某些页面也会导致此问题,但在此页面加载之后,即使切换到匿名以删除缓存,也是可靠的。

对于我的解决方案来说,这是一个足够的解决办法,但如果有更可靠的解决方案,我欢迎进一步的答案。

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

https://stackoverflow.com/questions/73766815

复制
相关文章

相似问题

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