2013-09-30 4 views
10

Ich habe damit stundenlang gekämpft und ich kann nicht herausfinden, warum nach der Bereitstellung meiner Scala Play 2.2-Anwendung in Heroku bekomme ich das Stacktrace:Scala Play 2.2 Anwendung stürzt nach der Bereitstellung in Heroku ab: target/start Keine solche Datei oder Verzeichnis

2013-09-30T01:05:09.413177+00:00 heroku[web.1]: Starting process with command `target/start -Dhttp.port=18174 $PLAY_OPTS` 
2013-09-30T01:05:10.931893+00:00 app[web.1]: bash: target/start: No such file or directory 
2013-09-30T01:05:12.382399+00:00 heroku[web.1]: Process exited with status 127 
2013-09-30T01:05:12.414050+00:00 heroku[web.1]: State changed from starting to crashed 

ich mehrere procfile Versionen ohne Erfolg versucht haben, sind einige Beispiele:

web: target/start -Dhttp.port=$PORT 

web: target/start -Dhttp.port=$PORT $PLAY_OPTS 

web: target/start -Dhttp.port=$PORT $JAVA_OPTS 

web: target/start Web -Dhttp.port=$PORT $PLAY_OPTS 

web: target/start -Dhttp.port=$PORT $PLAY_OPTS -Dconfig.file=application.conf 

web: target/start -Dhttp.port=$PORT $PLAY_OPTS -Dconfig.file=conf/application.conf 

ich habe sogar versucht keine procfile verwenden.

Ich benutze Scala 2.10.2 und Play 2.2. In derselben Heroku-Anwendung hatte ich eine vorherige Version meines Projekts auf Play 2.0, ich weiß nicht, ob das verwandt ist.

Die Anwendung funktioniert perfekt lokal. Ich habe mit der Bash in Heroku verbunden und

sbt clean 
sbt stage 

von Hand ausgeführt und ich habe überprüft, dass das Ziel gereinigt und wieder aufgebaut wird.

Worauf bezieht sich der Begriff "Ziel/Start: Keine solche Datei oder Verzeichnis"? Zum Ziel? Zum Startbefehl? Um etwas anderes?

Antwort

21

2.2 Wiedergabe änderte den Namen und Speicherort der Datei verwendet, um Ihre App

http://www.playframework.com/documentation/2.2.x/Production

Zum Beispiel zu beginnen, eine Anwendung des Projekts ‚foo‘ aus dem Projektordner zu starten, aktualisieren Sie Ihren procfile zu laufen:

target/universal/stage/bin/foo 
+1

ich so tat, und es sagt noch 'target/universal/stage/bin/mein-app-name-1234: Keine solche Datei oder kein Verzeichnis' –

+1

In Ihrem root, führen Sie 'play clean stage' aus. Dies wird das Zielverzeichnis für Sie machen. Dann einfach "cd" hinein und seine Hierarchie herausfinden. Inspiziere einfach weiter, bis du herausfindest, was dein App-Name ist. Das hat mir wirklich geholfen. Dies half beim Lösen des Ziels/universal/stage/bin/{app name} Problem – BenMorganIO

2

ich es wie folgt gelöst (möglicherweise bereits beantwortet, aber hier sind meine Schritte)

$ heroku local web 

die folgende Ausgabe in der Konsole Got

forego | starting web.1 on port 5000 
web.1 | /bin/bash: target/bin/Service: Permission denied 

Dann habe ich

$chmod 777 target/bin/Service 

und Problem gelöst. Hier

, Service ist der Name meiner Anwendung (wie in pom.xml org.codehaus.mojo Plugin angegeben) und hier ist das, was mein procfile Dateiinhalt sieht aus wie

web: target/bin/Service -Dhttp.port=${PORT} ${JAVA_OPTS} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL} 
+0

Diese Antwort sieht eher neu, aber in [Play 2.4.x der Dokumentation] (https://www.playframework.com/documentation/2.4.x/ProductionHeroku) scheint ganz anders zu deuten ('web: target/universal/stage/bin/myapp'), es hilft jedem. +1 für lokale Tests mit 'Heroku local web'. – matanster