2017-04-26 1 views
1

sinatra 앱을 배포 할 때 heroku가 신비한 오류를 생성하는 것으로 나타났습니다. 그것은 로컬 잘 작동, 사실, 그것은뿐만 아니라 Heroku가에 잘 실행 -하지만이 오류는 Heroku가 때마다 로그에 내가 (만 배포시 등) 배포 나타납니다sinatra app을 heroku에 배포하는 중 오류가 발생했습니다. bundler : 명령을로드하지 못했습니다. 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 

다른 게시물이 수 있음을 시사 config.ru의 오류 때문일 수 있습니다. 광산은 단순히 포함

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

heroku deploy log is here, 경우에 그것이 도움 :

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

여기 내이 Procfile입니다. 앞에서 말했듯이 앱이 정상적으로 작동하는 것으로 보입니다 (위의 스크립트가 성공적으로 끝났음을 알 수 있습니다). 그러나 모든 배포에서이 오류의 원인을 이해할 수 없습니다.

감사합니다.

+0

를 배포 할 때 오류가 이전 실행중인 서버에서 제기되고있다 일어나고? traceback은 최소한 5 행을 가지고 있다고 제안한다 :'/app/config.ru:5:in

', 그리고 당신이 포함하는 소스는 두 줄 밖에 없다. –

+0

좋은 지적. 나는 이것도 알아 차렸다. 내 프로젝트에는 단 하나의'config.ru' 만 있습니다 (이중 체크). heroku가 일종의 기본 'config.ru'를 배포하고 있습니까? 나는 heroku 문서에서 이것에 대한 어떠한 증거도 찾을 수 없으며, 나의 dyno에 연결하고 파일을 검사 할 때, 그것은 변하지 않는다. –

답변

1

Rack’s run methodSinatra’s run! method을 혼동하고 있습니다.

rackup을 사용하는 경우 Rack은 사용자가 config.ru에서 실행할 앱을 지정해야한다고 예상합니다. run (또는 map) 방법을 사용하면됩니다. config.ru에는이 중 하나가 없으므로 rackup을 실행하면 표시되는 오류를보고합니다 (missing run or map statement).

Sinatra는 자체의 run! 방법을 사용합니다. 전화를 걸면 Sinatra가 웹 서버를 시작하고 앱을 제공합니다. 이 서버는 다양한 Sinatra 설정을 준수합니다 (예 : set :server, 'puma' 등). rackup은이 설정을 사용하지 않습니다. (나는 당신이 애플 리케이션에 set :port, ENV['PORT'] 같은 것을 가지고 있다고 의심한다).

귀하의 config.ru 오류를 중지해야이 같은, 보일 것입니다 :

require './lib/app' 
run SinatraApp 

무슨 일이의 것은 당신이 rackup를 시작할 때 실행할 수있는 응용 프로그램을 구성하기 위해 config.ru를 구문 분석하는 것입니다. 이 과정에서이 파일은 일반 Ruby이므로 내장 된 Sinatra 서버를 시작합니다. 이렇게하면 랙 설치가 끝나지 않고 기본 제공 서버가 계속 실행됩니다.

나중에 서버를 중지하면이 기본 제공 서버 만 중지됩니다. 랙은 계속해서 config.ru을 읽고 계속해서 앱을 실행하여 서버를 시작할 수 있습니다. 아무 것도 발견하지 못하면 오류가 발생합니다. 귀하의 경우에는

은, 내가 생각하는 당신이 바로`config.ru`를 제공해야합니다 당신은 새 버전

+0

감사합니다. [This] (https : //gist.github.co.kr/lrettig/6c74f79217e02dd012cdb743f1a59c56)는 내가 제안한 변경을 한 후에 로그를 닫거나 다시 시작할 때 로그에 표시되는 내용입니다. 이게 그 모습일까요? –

+0

@LaneRettig 네, 그렇게 생각합니다. 그 예외는 Webrick이 Heroku가 보내는 SIGTERM에 응답하는 것입니다. [예 :로 전환하면 푸마] (https://devcenter.heroku.com/articles/ruby-default-web-server)를 보시면 안됩니다. – matt

+0

나는이 답을 옳은 것으로 표시 하겠지만 (감사합니다!), 나는 여전히 로그에있는 모든 명백한 오류 메시지에 의해 약간 우회되었습니다! –

관련 문제