2013-04-12 2 views
0

코드 배포 및 사이트 방문 후 H20 오류가 발생했습니다. 여기에 로그는 다음과 같습니다서버 오류 - heroku, django

heroku ps --app olp-website 

    === web: newrelic-admin run-program gunicorn -c gunicorn.py.ini wsgi:application 
    web.1: up 2013/04/12 12:46:21 (~ 1m ago) 

heroku ps:restart --app olp-website 

    Restarting processes... done 

heroku ps --app olp-website 

    === web: newrelic-admin run-program gunicorn -c gunicorn.py.ini wsgi:application 
    web.1: starting 2013/04/12 12:48:42 (~ 6s ago) 

그리고 지금 500 내부 서버 오류가 나타납니다 :

2013-04-12T13:38:19.116492+00:00 app[web.1]: 2013-04-12 13:38:19 [2] [INFO] Listening at: http://0.0.0.0:28853 (2) 
2013-04-12T13:38:19.115928+00:00 app[web.1]: 2013-04-12 13:38:19 [2] [INFO] Starting gunicorn 0.14.3 
2013-04-12T13:38:19.116593+00:00 app[web.1]: 2013-04-12 13:38:19 [2] [INFO] Using worker: gevent 
2013-04-12T13:38:19.122714+00:00 app[web.1]: 2013-04-12 13:38:19 [5] [INFO] Booting worker with pid: 5 
2013-04-12T13:38:19.135537+00:00 app[web.1]: 2013-04-12 13:38:19 [7] [INFO] Booting worker with pid: 7 
2013-04-12T13:38:19.129099+00:00 app[web.1]: 2013-04-12 13:38:19 [6] [INFO] Booting worker with pid: 6 
2013-04-12T13:38:19.140715+00:00 app[web.1]: 2013-04-12 13:38:19 [8] [INFO] Booting worker with pid: 8 
2013-04-12T13:38:19.393488+00:00 heroku[web.1]: State changed from starting to up 
2013-04-12T13:38:20.310391+00:00 app[web.1]: 2013-04-12 13:38:20,310 (5/Dummy-2) newrelic.core.agent INFO - New Relic Python Agent (1.3.0.289) 
2013-04-12T13:38:21.072892+00:00 heroku[router]: at=info method=GET path=/ host=olp-website.herokuapp.com fwd="86.151.6.106" dyno=web.1 connect=31ms service=761ms status=500 bytes=5 

내가 무슨 잘못을 볼 수

2013-04-12T11:45:59.304354+00:00 heroku[router]: at=error code=H20 desc="App boot timeout" method=GET path=/ host=olp-website.herokuapp.com fwd="86.151.6.106" dyno= connect= service= status=503 bytes= 

그래서 나는 동력계를 확인하려 왜냐하면이 코드는 개발 과정에서 잘 작동하기 때문에 생산을 위해 장고 - 스케 일 설정 파일을 사용하고 있기 때문입니다.

무엇이 잘못 설정 되었습니까?

편집 : heroku에 대한 데이터베이스 정보를 보면 데이터베이스에 0 개의 테이블이있는 것 같습니다. 그래서 sqlite 데이터베이스가 postresql로 마이그레이션하지 않았을 것입니다.

답변

0

일반적으로 H20 오류는 유휴 상태로 부팅하는 데 앱이 오래 걸리는 것을 의미합니다.

The router will enqueue requests for 75 seconds while waiting for starting processes to reach an “up” state. If after 75 seconds, no web dynos have reached an “up” state, the router logs H20 and serves a standard error page.

당신은 자산이 미리 컴파일하는 경우 있음 또는 앱 부팅 속도를 느리게 할 수있는 다른 일이 있는지 확인해야합니다.

디버깅 제한 시간 : 요청 시간 초과

원인 중 하나는 코드의 무한 루프이다. 로컬에서 테스트하고 문제를 복제하고 버그를 수정할 수 있는지 확인하십시오.

Sending an email 
Accessing a remote API 
Web scraping/crawling 
Rendering an image or PDF 
Heavy computation 
Heavy database usage (slow or numerous queries) 

이 그렇다면, 당신은 어떤 수있는 백그라운드 작업으로이 무거운 이동해야합니다 :

또 다른 가능성은 당신이 같은 웹 프로세스 내에서 장기 실행 작업의 어떤 종류의 일을하려고하는 것입니다 웹 요청에서 비동기 적으로 실행하십시오.

다른 클래스의 시간 초과는 응용 프로그램에서 사용하는 외부 서비스를 사용할 수 없거나 과부하되었을 때 발생합니다. 이 경우 작업을 백그라운드로 이동하지 않으면 웹 응용 프로그램이 시간 초과 될 가능성이 높습니다. 웹 요청 중에 이러한 요청을 처리해야하는 경우에는 항상 실패 사례를 계획해야합니다.

+0

정적 자산이 압축되어 Amazon S3에 업로드되었습니다. 그것은 정말 작은 응용 프로그램이고 잘 내 개발 서버에서 작동하므로 거기에 문제가 있다고 생각할 수 없습니다. 데이터베이스로 할 수 있을까요? (위의 편집 참조)? 또한 dynos를 다시 시작한 후 오류가 500 내부 서버 오류로 변경되었습니다. – babbaggeii

+0

제한 시간에는 여러 가지 이유가 있습니다. 데이터베이스에 관해 말했듯이, 코드에 무한 루프가 있습니까? – catherine

+0

전자 메일 보내기, 원격 API 액세스 (Twitter에 게시, Flickr 쿼리 등), 웹 스크래핑/크롤링, 이미지 또는 PDF 렌더링, 대량의 데이터베이스 사용 (느린 쿼리 또는 수많은 쿼리) – catherine