2017-03-16 1 views
0

Ich arbeite gerade an einer Spring Boot-Anwendung, die in heroku bereitgestellt wird. Die Anwendung hat 2 Hauptprojekte auf demselben Repo (Frontend und Backend). Ich habe es geschafft, das Frontend mit node.js laufen zu lassen und (technisch) auch die Spring-Boot-Applikation laufen zu lassen.Spring boot heroku "Keine Webprozesse werden ausgeführt"

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) 

Alles scheint in Ordnung, nach diesen Protokollen, aber wenn ich auf die Anwendung zugreifen zurückkehrt es eine HTTP-500 behauptet, dass es keine Web-Prozess ausgeführt werden.

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

Aber wenn ich mit Heroku ps überprüfen

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

Das ist mein procfile:

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

Es erklärt die 2 Verfahren (eine für die Vorderseite und eine für den Server). Es gibt 2 verschiedene Heroku-Apps, auf denen jeweils eines der Dynos läuft. Der node.js-Dynode funktioniert, aber der mit Spring-Boot funktioniert nicht.

Dies ist die Ordnerstruktur des Repo:

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

Hoffnung jemand kann mir helfen.

PD: Die Dateien package.json und pom.xml im Stammordner sind identisch mit denen in den Frontend- und Serverordnern.

Antwort

1

Ich bin sicher über Ihre genaue Einrichtung, aber im Allgemeinen können Sie nur einen Prozess haben, der HTTP-Anfragen erhalten wird. Und dieser Prozess muss web genannt werden. In Ihrem Fall ist web Prozess Ihre Knotenanwendung. api Prozess kann gut ausgeführt werden, aber es wird nie eine Anfrage erhalten. Sie müssen diese beiden Prozesse in zwei separate Heroku-Apps aufteilen.

+0

Danke. Sie haben recht, der Web-Prozess ist derjenige, der die http-Anfragen empfängt. Ich habe 2 verschiedene Apps, aber es gibt ein Repo, das beides enthält. es ist möglich, 2 procfile-dateien zu haben und anzugeben, welche für jede app gilt? –

+0

Sie können ein zusätzliches Skript erstellen, das abhängig von einer env-Variablen, z. B. 'APP_TYPE', entweder Ihre Knoten-App oder Ihre Spring-App ausführt. Führen Sie dieses Skript in Ihrem Procfile einfach als Webprozess aus. Ich denke, es sollte funktionieren. Eine andere Lösung wäre, ein einfaches Buildpack zu erstellen, das während des Builds ein entsprechendes Procfile erstellt, aber es ist eine kompliziertere Lösung. –

Verwandte Themen