如何验证Heroku上Procfile中的命令是否已执行?
问题原因
你Procfile里用的run: 进程类型不对——Heroku默认只会自动启动web: 类型的进程,run: 定义的是需要手动触发的一次性任务,所以启动应用时这些命令根本没被执行,自然日志里看不到。
解决方法
有两种靠谱的方式让这些命令随应用启动自动执行:
方式一:修改package.json的start脚本
把Prisma的命令整合到你的start脚本里,这样Heroku执行npm start时会依次运行所有命令:
"scripts": { "start": "npx prisma generate && npx prisma db push && node app.js" }
方式二:修改Procfile的web进程
直接把web进程的命令改成包含Prisma操作的完整语句:
web: npx prisma generate && npx prisma db push && node app.js
额外建议
如果是生产环境,更推荐用prisma migrate deploy替代prisma db push——db push是直接同步Schema到数据库,没有迁移历史记录;而migrate deploy会基于你本地生成的迁移文件(用prisma migrate dev创建)来执行,有版本追踪,更适合生产环境的数据库变更管理。记得把生成的prisma/migrations文件夹提交到代码库。
内容的提问来源于stack exchange,提问作者Federico Donner
相关产品推荐
相关产品推荐

