sbt多项目下Scala Akka Http应用部署Heroku后无法启动问题求助
问题根因
你遇到的报错确实和Procfile配置直接相关,核心原因是sbt多项目结构下,Heroku默认的启动路径指向了根项目的构建产物,但你可运行的Akka Http服务在api子项目中,对应的启动脚本没有生成在根项目的target目录下。
修复步骤
1. 确认sbt打包配置
首先检查你的build.sbt是否满足以下要求:
api子项目中已经启用sbt-native-packager插件(Heroku依赖该插件生成启动脚本)api子项目中已经明确配置了mainClass,指向你的Akka Http服务入口类- 本地执行
sbt api/stage命令后,能在./api/target/universal/stage/bin/目录下找到可执行的启动脚本(默认文件名和子项目的name配置一致,通常为api)
2. 修改Procfile配置
将你项目根目录下Procfile的内容替换为以下格式,替换启动脚本路径为api子项目的对应路径:
web: ./api/target/universal/stage/bin/api -Dhttp.port=$PORT
注意:如果你的api子项目配置了自定义的name属性,需要将上述命令中的api替换为你设置的子项目名称。
3. 可选:优化Heroku构建逻辑
如果不想每次全量构建所有子项目,可以在项目根目录下创建system.properties文件,添加以下配置指定Heroku执行的sbt构建命令:
sbt.stage.task=api/stage
该配置会让Heroku仅构建api子项目,减少构建时间。
验证方法
修改配置后重新执行git push heroku master部署即可,部署完成后可以通过heroku logs --tail查看启动日志确认服务正常运行。
内容的提问来源于stack exchange,提问作者M.G.
相关产品推荐
相关产品推荐

