2016-07-22 5 views
0

Dies wird in IBM Bluemix ausgeführt.

Ich benutze eine Java Ninja Framework App, als eigenständiges JAR (die Embedded Jetty verwendet). Wenn ich es lokal ausführen:

$ java -jar -Dninja.port=4444 new-app-1.0.0.jar

Die App startet, und lauscht auf Port 4444: o.e.jetty.server.ServerConnector - Started [email protected]{HTTP/1.1}{0.0.0.0:4444}

Dies ist jedoch nicht möglich, wenn auf CF. drängen

ich im Manifest versucht:

--- 
applications: 
- path: "./target/new-app-1.0.0.jar" 
    memory: "500m" 
    name: "foo-new-app" 
    env: 
    JAVA_OPTS: "-Dninja.port=$PORT" 
    buildpack: java_buildpack 

Die App immer auf 8080 lauschen (Standard):

OUT 03:25:29.979 [main] INFO o.e.jetty.server.ServerConnector - Started [email protected]{HTTP/1.1}{0.0.0.0:8080}

Und so ist die App nicht Health, auf dem seit seinem Zuhören falscher Port


die Vorschläge für @sabha Nach lief ich

CF_TRACE=true cf app foo-new-app

Und hier ist der erfasste Startbefehl:

"detected_start_command":"CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.2_RELEASE -memorySizes=metaspace:64m.. -memoryWeights=heap:75,metaspace:10,native:10,stack:5 -memoryInitials=heap:100%,metaspace:100% -totMemory=$MEMORY_LIMIT) && JAVA_OPTS=\"-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-buildpack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY -Dninja.port=\" && eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. ninja.standalone.NinjaJetty" 

Es ist wie der -Dninja.port arg sieht nicht richtig eingestellt:

-Dninja.port=\"

Wenn ich in der Bluemix Konsole (Umgebungsvariablen) zu buchen, ist es das, was ich für die JAVA_OPTS Variable sehen:

-Dninja.port=$PORT

Ist Bluemix dies nicht richtig umgehen? Ich sollte in der Lage sein, $ PORT nach den CF-Dokumenten dort zu verwenden.


Hier ist, wo die java_buildpack docs mit $ PORT als Argument beschreiben: https://github.com/cloudfoundry/java-buildpack/blob/master/docs/framework-java_opts.md#escaping-strings


Wieder @sabha folgenden, ich am Ende mit: JAVA_OPTS="-Dninja.port=\\$PORT"

Antwort

1

Es wird angezeigt, dass der $ PORT vor der eigentlichen Ausführung vom Buildpack früher interpretiert wird. Entkomme den $ PORT wie diesen '\ $ PORT' und das Java-Buildpack benutzt es einfach wie ein Literal und das Argument wird in der letzten Laufzeit interpretiert.

Auf diese Weise festlegen: ** cf set-env foo-neue-app JAVA_OPTS '-Dninja.port = \ $ PORT' ** & & cf resetage foo-new-app.

Dann überprüfen Sie mit den oben beschriebenen Methoden. vcap @ i7lpc06hav3: ~ $ ps -ef | grep java vcap 14 1 69 14:30? 00:00:33 /home/vcap/app/.java-buildpack/oracle_jre/bin/java -......... -Dninja.port = 8080 -Daccess.logging.enabled = false - Dhttp.port = 8080 -classpath /home/vcap/app/.java- ... org.apache.catalina.startup.Bootstrap starten

1

In CF Diego, Standard-Port zugewiesen ist 8080, so erhalten Sie das Standardverhalten. Sie können dies entweder verifizieren durch: 1) cf ssh App und ps -ef die Java-Befehlszeile args oder 2) starten Sie die App und überprüfen Sie die buildpack Ausgang für die Freigabe Schritt oder 3) um zu sehen, nur CF_TRACE=true cf app foo-new-app versuchen, den detected_start_command Wert zu überprüfen.

+0

Versuchte Ihre Vorschläge und aktualisierte Frage. Guck mal rein? – mtyson

+0

Es wird angezeigt, dass $ PORT vor der eigentlichen Ausführung vom Buildpack interpretiert wird. Entkomme den $ PORT wie folgt und das Java-Buildpack verwendet es einfach wie ein Literal und der Arg wird in der letzten Laufzeit interpretiert: – sabha

Verwandte Themen