2017-03-16 54 views
0

我目前正在部署在heroku的Spring Boot应用程序。该应用程序在同一个仓库(前端和后端)上有两个主要项目。我设法使用node.js来运行前端,并且(技术上)也设法运行spring引导应用程序。春季启动heroku“没有web进程运行”

2017-03-16T08:17:14.834886+00:00 app[api.1]: 2017-03-16 08:17:14.834 INFO 4 --- [main] o.s.web.servlet.DispatcherServlet: FrameworkServlet 'dispatcherServlet': initialization completed in 35 ms 
    2017-03-16T08:17:14.906139+00:00 app[api.1]: 2017-03-16 08:17:14.905 INFO 4 --- [main] com.zilicio.editor.ServerApplication: Started ServerApplication in 14.331 seconds (JVM running for 16.638) 
    2017-03-16T08:17:14.881330+00:00 app[api.1]: 2017-03-16 08:17:14.881 INFO 4 --- [main] .s.b.c.e.j.JettyEmbeddedServletContainer: Jetty started on port(s) 11831 (http/1.1) 

一切都按照该日志似乎确定,但是当我访问应用程序它返回一个HTTP 500声称有没有Web进程运行。

2017-03-16T08:17:29.435087+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/api/projects" (...) 

但是,当我与Heroku的PS

api.1: up 2017/03/16 03:16:56 -0500 (~ 30m ago) 

检查这是我procfile:

web: node Z-Editor/Frontend/server.js 
    api: java -Dserver.port=$PORT $JAVA_OPTS -jar Z-Editor/Server/target/*.jar 

它定义了2个过程(一个正面和一个用于服务器)。有2个不同的heroku应用程序运行每个dynos。 node.js dyno正在工作,但使用Spring引导的不是。

这是回购的文件夹结构:

+root 
     - procfile 
     + frontend 
     - package.json 
     - ... 
     + server 
     - src 
     - pom.xml 
     + target 
      - server.jar 
      - ... 
     - package.json 

希望有人能帮助我。

PD:根文件夹中的package.json和pom.xml与前端和服务器文件夹中的package.json和pom.xml相同。

回答

1

我确定您的确切设置,但通常您只能有一个进程接收http请求。而这个过程必须命名为web。在你的情况下,web进程是你的节点应用程序。 api进程可以正常运行,但它永远不会收到任何请求。您需要将这两个进程分成两个独立的Heroku应用程序。

+0

谢谢。你是对的,Web进程就是接收http请求的进程。我有2个不同的应用程序,但有一个包含这两个应用程序的回购。有可能有2个procfile文件,并指定哪一个适用于每个应用程序? –

+0

您可以创建一个额外的脚本,根据某个env变量运行节点应用程序或弹簧应用程序,例如“APP_TYPE”。在您的Procfile中,只需将此脚本作为Web进程运行即可。我认为它应该工作。另一个解决方案是创建简单的buildpack,在构建期间创建适当的Procfile,但这是更复杂的解决方案。 –