2017-04-26 1 views
1

Ich bemerkte, dass heroku einen mysteriösen Fehler erzeugt, wenn ich meine sinatra-App bereitstelle. Es arbeitet vor Ort in Ordnung, und in der Tat, es läuft auf Heroku auch gut - aber dieser Fehler erscheint in der Heroku jedes Mal anmeldet ich einsetzen (und nur auf deploy):Mysteriöser Fehler bei der Bereitstellung der Sinatra-App auf Heroku: Bundler: Befehl konnte nicht geladen werden: rackup

2017-04-26T08:52:25.579045+00:00 app[web.1]: bundler: failed to load command: rackup (/app/vendor/bundle/ruby/2.3.0/bin/rackup) 
2017-04-26T08:52:25.579176+00:00 app[web.1]: RuntimeError: missing run or map statement 
2017-04-26T08:52:25.579178+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/builder.rb:146:in `to_app' 
2017-04-26T08:52:25.579179+00:00 app[web.1]: /app/config.ru:5:in `<main>' 
2017-04-26T08:52:25.579180+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/builder.rb:49:in `eval' 
2017-04-26T08:52:25.579180+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/builder.rb:49:in `new_from_string' 
2017-04-26T08:52:25.579181+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/builder.rb:40:in `parse_file' 
2017-04-26T08:52:25.579182+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/server.rb:299:in `build_app_and_options_from_config' 
2017-04-26T08:52:25.579183+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/server.rb:208:in `app' 
2017-04-26T08:52:25.579184+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/server.rb:336:in `wrapped_app' 
2017-04-26T08:52:25.579184+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/server.rb:272:in `start' 
2017-04-26T08:52:25.579185+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/server.rb:147:in `start' 
2017-04-26T08:52:25.579186+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/bin/rackup:4:in `<top (required)>' 
2017-04-26T08:52:25.579187+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/bin/rackup:23:in `load' 
2017-04-26T08:52:25.579215+00:00 app[web.1]: /app/vendor/bundle/ruby/2.3.0/bin/rackup:23:in `<top (required)>' 
2017-04-26T08:52:25.724981+00:00 heroku[web.1]: Process exited with status 1 
2017-04-26T08:52:26.928566+00:00 heroku[web.1]: Starting process with command `bundle exec rackup config.ru -p 56963` 
2017-04-26T08:52:29.278571+00:00 app[web.1]: [2017-04-26 08:52:29] INFO WEBrick 1.3.1 
2017-04-26T08:52:29.278590+00:00 app[web.1]: [2017-04-26 08:52:29] INFO ruby 2.3.1 (2016-04-26) [x86_64-linux] 
2017-04-26T08:52:29.278909+00:00 app[web.1]: == Sinatra (v1.4.8) has taken the stage on 56963 for production with backup from WEBrick 
2017-04-26T08:52:29.279274+00:00 app[web.1]: [2017-04-26 08:52:29] INFO WEBrick::HTTPServer#start: pid=4 port=56963 
2017-04-26T08:52:29.825875+00:00 heroku[web.1]: State changed from starting to up 

Andere Beiträge deuten darauf hin, dass dies aufgrund eines Fehlers in config.ru sein. Mine enthält einfach:

require './lib/app' 
SinatraApp.run! 

Hier ist mein Procfile:

web: bundle exec rackup config.ru -p $PORT 

Die heroku deploy log is here, falls es ist hilfreich. Wie gesagt, die App scheint gut zu funktionieren (Sie können sehen, dass sie am Ende des obigen Transkripts erfolgreich gestartet wird), aber ich kann nicht verstehen, was diesen Fehler bei jeder Bereitstellung verursacht.

Danke.

+0

Sind bereitstellen bereitgestellt 'config.ru'? Die Rückverfolgung schlägt vor, dass es mindestens 5 Zeilen hat: '/app/config.ru:5:in

', und die Quelle, die Sie eingeschlossen haben, hat nur zwei Zeilen. –

+0

Guter Punkt. Das habe ich auch bemerkt. Es gibt nur ein 'config.ru' in meinem Projekt (ich habe es überprüft). Stellt Heroku eine Art von 'config.ru' bereit? Ich kann in den heroku-Dokumenten keinen Hinweis darauf finden, und wenn ich mich mit meinem Prüfstand verbinde und die Datei untersuche, ist sie unverändert. –

Antwort

1

Sie verwirren Rack’s run method mit Sinatra’s run! method.

Bei Verwendung von rackup erwartet Rack, dass Ihre config.ru angibt, welche Anwendung ausgeführt werden soll. Sie tun dies mit den Methoden run (oder map). Ihr config.ru hat keine von diesen, also wenn rackup läuft, melden Sie den Fehler, den Sie sehen: missing run or map statement.

Sinatra hat seine eigene run! Methode. Wenn Sie dies aufrufen, wird Sinatra einen Webserver starten und Ihre App bedienen. Dieser Server berücksichtigt die verschiedenen Sinatra-Einstellungen (z. B. set :server, 'puma' usw.). rackup verwendet diese Einstellungen nicht. (Ich vermute, Sie haben eine Zeile wie set :port, ENV['PORT'] in Ihrer App).

Ihre config.ru sollte in etwa so aussehen, die den Fehler stoppen sollten:

require './lib/app' 
run SinatraApp 

Was passiert ist, dass, wenn Sie rackup beginnen wird es Ihre config.ru zu analysieren, um die App zu konfigurieren auszuführen. Da diese Datei Ruby ist, starten Sie den integrierten Sinatra-Server. Dadurch wird die Fertigstellung des Rackups gestoppt und der integrierte Server wird ausgeführt.

Wenn Sie den Server später stoppen, stoppen Sie nur diesen integrierten Server. Rack wird weiterhin config.ru lesen und erwartet, dass eine App ausgeführt wird, damit auch ein Server gestartet werden kann. Wenn nichts gefunden wird, wird ein Fehler angezeigt.

In Ihrem Fall, was ich denke, geschieht wird der Fehler aus dem vorherigen laufenden Server angehoben wird, wenn Sie eine neue Version, die Sie sicher, dass Sie die richtige

+0

Danke. [Dies] (https: //gist.github.com/lrettig/6c74f79217e02dd012cdb743f1a59c56) ist, was ich im Protokoll jetzt sehe, wenn heruntergefahren/neu gestartet wird, nachdem ich die von Ihnen vorgeschlagene Änderung vorgenommen habe. Soll das so aussehen? –

+0

@LaneRettig yep, ich denke schon. Diese Ausnahmen sind Webrick, die auf das SIGTERM reagieren, das Heroku sendet. Wenn Sie [z. Puma] (https://devcenter.heroku.com/articles/ruby-default-web-server) sollten Sie diese nicht sehen. – matt

+0

Ich werde diese Antwort als richtig markieren (danke!), Aber ich bin immer noch ein bisschen durch die scheinbar harmlosen Fehlermeldungen in den Protokollen verrückt! –

Verwandte Themen