我如何知道proc file命令是否在Heroku上运行?

cetgtptt  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(116)

我正在Node中设置一个新的REST API,并在Heroku上运行它。我使用Postgres和Prisma。我需要Heroku在启动时运行我的数据库迁移,以防我的模式发生变化。
为此,我使用以下命令创建了一个Procfile:

run: npx prisma generate
run: npx prisma db push

如果我在Heroku控制台中运行这些命令,它们就会工作,并且更改会影响数据库。我不知道的是如何验证Procfile命令是否实际运行。当我启动我的应用程序时,我会得到这些日志:

2023-08-21T14:50:19.185922+00:00 heroku[web.1]: Starting process with command `npm start`
2023-08-21T14:50:22.025861+00:00 app[web.1]:
2023-08-21T14:50:22.025890+00:00 app[web.1]: > [email protected] start
2023-08-21T14:50:22.025890+00:00 app[web.1]: > node app.js
2023-08-21T14:50:22.025890+00:00 app[web.1]:
2023-08-21T14:50:22.512882+00:00 heroku[web.1]: State changed from starting to up
2023-08-21T14:50:22.379409+00:00 app[web.1]: Listening on 43532

我希望在这些日志的某个地方看到npx prisma generatenpx prisma db push
我是不是漏了什么?命令是否正在运行但未记录?

mo49yndu

mo49yndu1#

Procfile s

这不是Procfile s的工作方式。它们不是用来列出要一个接一个运行的命令,而是用来定义进程类型。
只有两种进程类型-webrelease-对Heroku有意义。所有其他名称,包括您在这里使用的run,都是任意名称,除非您启动dynos来处理入站HTTP请求,手动运行它们等,否则不会执行任何操作。
您可以在一次性dyno中手动运行命令<$:

heroku run run  # the first `run` is a Heroku CLI command,
                # the second is the name of your process

但是你的问题的重点是如何自动运行这些命令,而不是手动。

发布阶段

相反,你应该声明一个release进程类型:

release: npx prisma db push

release命令在成功部署后以及其他一些情况下运行。

prisma generate

npx prisma generate不应该是您发布过程的一部分。它必须在您的 * 开发环境 * 中运行,并且它生成的文件需要提交。当您的代码到达Heroku时,此命令应该没有更多的工作要做。
Heroku dynos使用一个临时文件系统。在Heroku上创建或修改的任何文件都会在dyno每次重新启动时丢失。这种情况经常发生,每天至少一次。
注意,您已经定义了相同的进程类型run两次。只有一个命令可以分配给任何给定的进程类型,所以只有一个你已经声明的命令将以这种方式实际运行。

相关问题