[英]Deploying spring boot application to heroku - error message "App crashed"
[英]Deploying spring boot application to heroku - error message "No web processes running"
我创建了一个 Spring Boot Web 应用程序(在 IntelliJ IDEA 中),它在本地运行没有问题。
然后我构建了一个工件(Build -> Build Artifacts... -> my_app:jar -> Build),它在目录“out”中创建了一个 jar 文件。
我尝试完全按照 heroku 在本演练中描述的步骤将应用程序部署到 heroku: https ://devcenter.heroku.com/articles/deploying-spring-boot-apps-to-heroku
注意:演练没有提到 Procfile,所以我没有创建一个。
在浏览器中打开应用程序的地址时,我遇到了“应用程序错误”。
日志显示构建应用程序成功,但显然“没有网络进程正在运行”:
2020-02-06T20:42:19.262364+00:00 app[api]:由用户 michaels@icloud.com 创建的 Release v1 2020-02-06T20:42:19.598724+00:00 app[api]:由用户创建的 Release v2用户 michaels@icloud.com 2020-02-06T20:42:19.262364+00:00 app[api]:用户 michaels@icloud.com 2020-02-06T20:42:19.598724+00:00 app[api] 的初始版本:由用户 michaels@icloud.com 启用 Logplex 2020-02-06T20:46:11.000000+00:00 app[api]:由用户 michaels@icloud.com 2020-02-06T20:46:56.626428+00:00 开始构建app[api]:发布 v3 由用户 michaels@icloud.com 2020-02-06T20:46:56.626428+00:00 app[api]:由用户 michaels@icloud.com 部署 93b6dfea 2020-02-06T20:47: 04.000000+00:00 app[api]: 构建成功 2020-02-06T20:48:22.485742+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path=" /" host=my-app.herokuapp.com request_id=22e30a92-5094-4f8b-a51c-3f21177b19dc fwd="95.88.203.176" dyno= connect= service= status=503 bytes= protocol=https
我使用以下命令检查了 dyno 是否正在运行:
heroku ps
结果:
⬢无限天空81114上没有dynos
然后我运行以下命令来启动一个 dyno:
heroku ps:scale web=1
结果:
缩放动态...! ▸ 找不到该进程类型 (web)。
因此该应用程序无法运行,因为没有 dyno - 但我无法启动 dyno。
我怎样才能使这项工作?
假设您使用的是 JAR,默认情况下将创建Procfile
。 你确定你的网络测功机还在运行吗? 如果您使用的是 cli,则可以使用heroku ps
检查状态。 如果它说没有 dynos,您可以使用heroku ps:scale web=1
并尝试heroku open
以启动应用程序。
如果您使用 WAR,您可以关注https://devcenter.heroku.com/articles/war-deployment ,是的,您需要 Procfile。
此外,在独立 tomcat 上运行 spring boot 应用程序时,不要忘记按照此处的步骤操作https://docs.spring.io/spring-boot/docs/2.1.10.RELEASE/reference/html/howto-traditional-deployment。 html
以下是我在进行 spring boot heroku 集成时拍摄的一些屏幕截图。
Pom(带有 WebRunner 插件) Demo Application(注意SpringBootServletInitializer的使用)。 如果你不使用它,你会得到 404。
看起来您正在尝试部署 WAR 文件。 如果没有 Web 服务器,您将无法运行 WAR 文件。 您有两个选择:
我推荐第一种方法。 Heroku 在设置 Spring 启动应用程序方面有很好的演练。
只需创建Procfile
web: java -Dspring.profiles.active=default -Dserver.port=$PORT -jar target/*.jar
另外不要忘记通过执行heroku create
将 heroku 的源添加到 heroku git。 这会将源代码放到 heroku git 中,当构建 dynos 时,它将从源代码部署您的应用程序。
这是我的示例项目,它是您将 Spring Boot 应用程序部署到云的入门项目。 https://github.com/reflexdemon/cloud-project
我还写了一篇关于将 Spring Boot 应用程序部署到 heroku 的博客。 希望有帮助。 https://blog.vpv.io/2018/02/undocumented-java-web-application.html
更灵活的方法是使用Heroku Container Registry ,它允许运行基于 Docker 的应用程序。
这种方法允许运行您在本地构建/测试的完全相同的应用程序映像,并且不需要添加特定于 Heroku 的配置 (Procfile)。
先决条件
运行 Docker 和 Heroku 客户端,并确保您的帐户已通过身份验证:
heroku login
heroku container:login
定义 Docker 镜像
创建一个 Dockerfile
FROM adoptopenjdk/openjdk11:latest
RUN mkdir -p /software
ADD target/myapp.jar /software/myapp.jar
CMD java -Dserver.port=$PORT $JAVA_OPTS -jar /software/myapp.jar
注意:注入 env 变量$PORT
是在 Heroku 上运行 SpringBoot 应用程序所必需的
建立形象
docker build -t mydomain/myapp .
并在本地测试
docker run -it --name myapp -p 8886:8886 mydomain/myapp
注意:在上面的示例中,您的 application.properties 定义server.port=8886
以使用 8886 作为 Spring Boot 应用程序的端口
标记、推送和部署到 Heroku
接下来标记图像,然后将其推送到 Heroku:
docker tag mydomain/myapp registry.heroku.com/myapp/web
docker push registry.heroku.com/myapp/web
最后应用程序可以启动:
heroku container:release web -a myapp
您还可以放大(或缩小)应用程序:
# undeploy
heroku ps:scale web=0 --app myapp
参考
请参阅https://devcenter.heroku.com/articles/container-registry-and-runtime
亲爱的 s7vr 你帮了我很多。 感谢 jou 提供了我一直在寻找的答案。 保护你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.