0

コードをデプロイしてサイトにアクセスした後、H20 エラーが発生しました。ログは次のとおりです。

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=

だから私はdynosをチェックアウトしようとしました:

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

開発ではコードが正常に動作し、本番環境では django-skel 設定ファイルを使用しているため、何が問題なのかわかりません。

何が間違って設定されている可能性があるかについての考えはありますか?

編集:herokuのデータベース情報を見るだけで、データベースにテーブルがないように見えるので、sqliteデータベースはpostresqlに移行されなかったと思います。

4

1 に答える 1

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.

そのアセットがプリコンパイルされているかどうか、またはアプリの起動を遅くする可能性のあるものが他にないかどうかを確認する必要があります。

デバッグのタイムアウト:

リクエストのタイムアウトの原因の 1 つは、コード内の無限ループです。ローカルでテストし、問題を再現してバグを修正できるかどうかを確認します。

別の可能性としては、Web プロセス内で次のような長時間実行されるタスクを実行しようとしている可能性があります。

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

その場合、この重労働を Web リクエストから非同期に実行できるバックグラウンド ジョブに移動する必要があります。

別の種類のタイムアウトは、アプリケーションで使用される外部サービスが利用できないか、過負荷になっている場合に発生します。この場合、作業をバックグラウンドに移動しない限り、Web アプリはタイムアウトする可能性が高くなります。Web 要求中にこれらの要求を処理する必要がある場合は、常に失敗のケースを計画する必要があります。

于 2013-04-12T13:47:06.530 に答える