2013-01-14 4 views
2

나는 60 초 동안 무슨 일이 일어나고 있는지에 대한 아이디어를 얻으려는 단계에 관심이있어 발사 및 일반적인 원인을 막을 수 있습니다.heroku에서 "Error R10 (Boot timeout)"문제를 디버그하는 방법

이 로그 파일 외모

2013-01-14T10:34:17+00:00 app[web.1]: => Booting Thin 
2013-01-14T10:34:17+00:00 app[web.1]: => Call with -d to detach 
2013-01-14T10:34:17+00:00 app[web.1]: => Rails 3.2.2 application starting in production on http://0.0.0.0:52216 
2013-01-14T10:34:17+00:00 app[web.1]: => Ctrl-C to shutdown server 
2013-01-14T10:34:23+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 
2013-01-14T10:34:23+00:00 heroku[web.1]: Stopping process with SIGKILL 
2013-01-14T10:34:24+00:00 heroku[web.1]: Process exited with status 137 
2013-01-14T10:34:24+00:00 heroku[web.1]: State changed from starting to crashed 

내가 프로세스가 살해되었을 때, 표시 적어도 스택 추적이 있다면, 그것은있을 거라고 생각 (actualy 무슨 일이 있었는지에 대해 아무것도 알 수 없음)하는 방법이다 매우 도움이됩니다.

언제 이런 일이 발생합니까?

추신 : 내 경우에 대한 답변을 찾는 것이 아니라 모든 사람들이 누릴 수있는 일반적 단계를 찾고 있습니다.

+0

참고 :이 게시물의 방법도 유용 할 수 있습니다. http://stackoverflow.com/questions/11544460/how-to-get-a-backtrace-from-a-systemstackerror-stack-level-too- 깊은 – hakunin

답변

9
나는 보통 보석 다음 코드 (초기화/debug_require.rb)를 오랜 시간을내어 알아내는 것부터 시작

:

if ENV['DEBUG_REQUIRE'] 
    require 'benchmark' 

    def require(file) 
    @@first ||= Time.now 
    rc = false 
    ts = Benchmark.measure do 
     rc = super 
    end 
    if ENV['DEBUG_REQUIRE'].to_f < ts.total 
     total = ts.format("%t require #{file}") 
     from_start = (Time.now - @@first).to_i 
     $stdout.puts "#{total} (#{from_start} second(s) from start)" 
    end 
    rc 
    end 
end 

는 설정이 추가/boot.rb :

require File.expand_path('../initializers/debug_require', __FILE__) 

세트 및 heroku config:add DEBUG_REQUIRE=1

느린 요구 사항에 대한 로그 출력을보십시오.

+0

그게 아주 간단하고 도움이 감사합니다! – hakunin

+0

이것은 분명히 어딘가에 Heroku 루비 문서에 있어야합니다. 그렇지 않니?! – imderek

+1

Rails 4에서 @@ first가 호출 된 곳에서 다음과 같은 오류가 발생했습니다 :'/app/config/initializers/debug_require.rb:7 : warning : 최상위 클래스에서 클래스 변수 접근' – migu

0

어쩌면 당신은 무슨 일이 일어나고 있는지 확인하기 위해 로컬로 실행하려고 할 수 있습니까? 당신은 그것을 할이 게시물에 사용할 수있는 코드를 사용 할 수있는 : 가 Heroku App Boot Timeout 토론에 설명으로 http://ablogaboutcode.com/2012/05/03/benchmark-your-bundle/

, 당신은 당신이 필요로하는 보석의 수를 살펴보고 아마 첫째을 조정해야합니다. 부팅 부하가 60 초 이상 걸리는 경우이 보석을 살펴볼 수도 있습니다 : https://github.com/dblock/heroku-forward.

+0

팁 주셔서 감사합니다, 응용 프로그램을 로컬로 잘 실행하고 Gemfile에 몇 가지 새로운 보석을 가지고 지점을 개발 rebased 일단 문제가되었다. 또한 동일한 응용 프로그램이 문제없이 다른 서버에서 실행되고있었습니다. 그래서 모든 논리가 실패하고 내가 여기에 팁을 요청한 이유입니다. – hakunin