首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在heroku用Nuxt部署Prisma

在heroku用Nuxt部署Prisma
EN

Stack Overflow用户
提问于 2021-12-30 14:09:43
回答 1查看 227关注 0票数 0

我已经花了几天的时间试图弄清楚为什么我的后端没有在我的应用程序的在线版本上工作。我创建了一个Nuxt项目,它将Prisma用于一个非常小而简单的数据库。

在积极使用prisma之前,我已经构建了应用程序的"Nuxt部分“(尽管它已经在项目中实现了)。

过了一段时间,我为prisma创建了一个非常基本的API来使用它,我让每个人都在本地工作,然后我尝试在heroku上构建它,方法是将以下一行:release: npx prisma migrate deploy添加到我的Procfile中。

我以为这将使用最新的迁移来重新创建本地数据库,但是当浏览在线版本时,我注意到依赖于数据库的所有东西都不起作用,因为它可能不在数据库中。

我尝试手动进行迁移,并推动分支查看Heroku将记录什么,结果是:

代码语言:javascript
运行
复制
2021-12-30T13:46:41.573842+00:00 heroku[release.1710]: State changed from starting to up
2021-12-30T13:46:43.062707+00:00 app[release.1710]: Prisma schema loaded from prisma/schema.prisma
2021-12-30T13:46:43.083393+00:00 app[release.1710]: Datasource "db": SQLite database "dev.db" at "file:./dev.db"
2021-12-30T13:46:43.118865+00:00 app[release.1710]: 
2021-12-30T13:46:43.118897+00:00 app[release.1710]: 12 migrations found in prisma/migrations
2021-12-30T13:46:43.118939+00:00 app[release.1710]: WARNING The following migrations have been modified since they were applied:
2021-12-30T13:46:43.118940+00:00 app[release.1710]: 20211216111431_init
2021-12-30T13:46:43.118941+00:00 app[release.1710]:
2021-12-30T13:46:43.120322+00:00 app[release.1710]:
2021-12-30T13:46:43.120440+00:00 app[release.1710]: No pending migrations to apply.
2021-12-30T13:46:43.348438+00:00 heroku[release.1710]: Process exited with status 0
2021-12-30T13:46:43.426838+00:00 heroku[release.1710]: State changed from up to complete
2021-12-30T13:46:45.281380+00:00 app[api]: Release v32 created by user marnixelling24@gmail.com
2021-12-30T13:46:46.373458+00:00 heroku[web.1]: Restarting
2021-12-30T13:46:46.454020+00:00 heroku[web.1]: State changed from up to starting
2021-12-30T13:46:47.466600+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2021-12-30T13:46:47.671788+00:00 heroku[web.1]: Process exited with status 143
2021-12-30T13:46:57.249166+00:00 heroku[web.1]: Starting process with command `npm start`
2021-12-30T13:46:58.317560+00:00 app[web.1]:
2021-12-30T13:46:58.317577+00:00 app[web.1]: > fullstack-nuxt@1.0.0 start /app
2021-12-30T13:46:58.317577+00:00 app[web.1]: > nuxt start
2021-12-30T13:46:58.317577+00:00 app[web.1]:
2021-12-30T13:46:59.566391+00:00 app[web.1]: ℹ Listening on: http://172.17.136.142:51422/
2021-12-30T13:46:59.601868+00:00 heroku[web.1]: State changed from starting to up

EN

回答 1

Stack Overflow用户

发布于 2022-05-16 05:55:42

我相信这是因为您试图在Heroku上部署sqlite,这是不建议的,因为Heroku会定期清理磁盘并擦除sqlite数据库(请参阅Heroku上的SQLite)。相反,使用他们的数据库作为服务,他们有一个免费层的postgresql。这将要求您也在本地使用postgresql,因为Prisma取消了具有多个提供程序的能力(在生产中使用sqlite和postgresql )。在开发和生产中使用相同的数据库是最好的实践。

下面是在Nuxt 3中本地运行postgresql并将其部署到Heroku的一些步骤。

局部性

在项目根dir中的docker-compose.yml-file中创建带有停靠器的postgres数据库。

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

services:
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    env_file:
      - .env

在项目根dir,.env中创建一个环境变量文件

代码语言:javascript
运行
复制
POSTGRES_HOST=0.0.0.0
POSTGRES_PORT=5432
POSTGRES_DB=db
POSTGRES_USER=localadmin
POSTGRES_PASSWORD=
DATABASE_URL=postgres://localadmin:localpw@0.0.0.0:5432/db

为了方便起见,向package.json中添加一些npm脚本

代码语言:javascript
运行
复制
{
  "scripts": {
    ...
    "dev": "npm run dev:db && nuxt dev",
    "dev:db": "docker-compose up -d db",
    "stop": "docker-compose down"
  }
}

更新prisma schema.prisma并将提供程序更改为postgres

代码语言:javascript
运行
复制
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

现在,您应该能够使用npm run dev启动本地开发,并使用npm run stop关闭数据库容器。

生产

创建Heroku postgres db:

  1. 登录到Heroku并导航到您的应用程序。转到Resources,点击Find more add-ons
  2. 选择Heroku Postgres空闲层。(3. ?)我相信Heroku会自动添加配置vars。转到设置和Show Config Vars,应该有一个带有新Heroku的凭据的DATABASE_URL
  3. 在名为Procfile的项目根dir中创建一个新文件,这将告诉Heroku在部署中运行哪些脚本。它应该为webrelease提供指导,告诉Heroku如何启动服务器和如何进行迁移。
代码语言:javascript
运行
复制
web: npm start

release: npx prisma migrate deploy

希望这能帮上忙!

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

https://stackoverflow.com/questions/70532786

复制
相关文章

相似问题

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