6

PythonとFlaskでHerokuを使用しています。Python アプリケーション ファイルの数行を更新するまで、私のアプリは正常に動作していました。アプリはローカルで正常に動作しますが、アプリにアクセスしようとすると次のエラーが発生します。

「アプリケーションでエラーが発生したため、ページを表示できませんでした。しばらくしてからもう一度お試しください。アプリケーションの所有者である場合は、ログで詳細を確認してください。」

私のログは次のようになります。

2012-10-03T17:40:26+00:00 heroku[web.1]: Process exited with status 1
2012-10-03T17:40:26+00:00 heroku[web.1]: State changed from starting to crashed
2012-10-03T17:51:25+00:00 heroku[web.1]: State changed from crashed to starting
2012-10-03T17:51:26+00:00 heroku[web.1]: Starting process with command `python presentation.py`
2012-10-03T17:51:26+00:00 app[web.1]: ImportError: No module named site

また、heroku を介して Python を実行することもできなくなりました。

Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku run python
Running `python` attached to terminal... up, run.1
ImportError: No module named site

次にやろうとしたことは、環境変数を確認することです。

Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku config
=== infinite-fortress-4866 Config Vars
LANG:             en_US.UTF-8 
LD_LIBRARY_PATH:  /app/.heroku/vendor/lib
LIBRARY_PATH:     /app/.heroku/vendor/lib
PATH:             /app/.heroku/venv/bin:/bin:/usr/local/bin:/usr/bin
PYTHONHASHSEED:   random
PYTHONHOME:       /app/.heroku/venv/
PYTHONPATH:       /app/
PYTHONUNBUFFERED: true

ただし、ライブラリ ディレクトリ内を調べようとすると、次のような結果が得られます。

Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku run ls /app/.heroku/vendor/lib
Running `ls /app/.heroku/vendor/lib` attached to terminal... up, run.1
ls: cannot access /app/.heroku/vendor/lib: No such file or directory

現時点ではどこに進むべきかわかりません。アプリが恋しいです、助けてください!

追加情報:

問題はすべて、次の行を app.py コードに追加したときに始まりました。

 @app.route('/my_fb_graph',methods=['GET','POST'])
 def my_fb_graph():
 return render_template('my_fb_graph.html')

コードをプッシュすると、アプリが機能しなくなりました。次に、これらのコード行を削除し、コードを再度プッシュしましたが、同じエラーが発生しました。次に行ったのは、app.py ファイルを完全に削除し、まだ機能しない小さなテスト コードを試すことでした。

問題の根本はエラーのようです:

 2012-10-03T17:51:26+00:00 app[web.1]: ImportError: No module named site
4

3 に答える 3

6

昨日 (2012 年 12 月 6 日)、非常によく似た問題が発生しました。突然、すべての Python 呼び出しが「ImportError: No module named site」で終了しました。今日、Heroku のサポートから連絡がありましたが、Heroku 側で修正されたと言われているため、次の回避策は必要ありません。他の誰かが診断するのに役立つ場合に備えて、これをここに残します。

ただし、heroku の構成変数を確認したところ、PYTHON* 変数が設定されていませんでした。ただし、シェルレベルで環境変数として設定されました。

$ heroku run set | grep PYTHON
PYTHONHASHSEED=random
PYTHONHOME=/app/.heroku/venv/
PYTHONPATH=/app/
PYTHONUNBUFFERED=true 

/app/.heroku/venv は存在しないディレクトリでした。構成変数で PYTHONHOME をオーバーライドし、実際の virtualenv の場所を指定すると、すべてが再び機能し始めました。

$ heroku config:set PYTHONHOME=/app

/app は、プロジェクト ルート ディレクトリのマウント ポイントのようです。Python ビルドパックの歴史を掘り下げると、私がプロジェクトを開始したとき、誰もがプロジェクト ルートで virtualenv を作成したようです。現在、新しいプロジェクトは venv/ サブディレクトリに virtualenv を作成します。サポートは、ビルドパックの変更を徐々に展開していると言っていましたが、古いやり方のチェックがうまくいかなかったと思います.

ビルドパックの内部を探す場所は次のとおりです: https://github.com/heroku/heroku-buildpack-python/blob/master/bin/compile

于 2012-12-06T21:34:44.963 に答える
6

問題を修正できましたが、そもそもなぜそれが発生したのかまだわかりません!

多くの実験を重ねた結果、Heroku でまったく新しいアプリをセットアップすることになりました。新しいアプリで環境変数を確認したところ、次の結果が得られました。

 Cinnas-MacBook-Pro:thawing-temple-4323 cinna$ heroku config
 === thawing-temple-4323 Config Vars
 FACEBOOK_APP_ID:  ***
 FACEBOOK_SECRET:  ***
 PATH:             bin:/usr/local/bin:/usr/bin:/bin
 PYTHONUNBUFFERED: true

元のアプリ (壊れたアプリ) を確認したところ、ログに示されているように、最後のプッシュで新しい環境変数が何らかの形で追加されていることがわかりました。

 2012-10-04T04:20:04+00:00 heroku[api]: Add PYTHONUNBUFFERED, PYTHONPATH, PYTHONHOME, LANG, LD_LIBRARY_PATH, PATH, PYTHONHASHSEED, LIBRARY_PATH config by ***@***

そして私の環境変数をチェックすることによって:

 Cinnas-MacBook-Pro:infinite-fortress-4866 cinna$ heroku config
 === infinite-fortress-4866 Config Vars
 LANG:             en_US.UTF-8 
 LD_LIBRARY_PATH:  /app/.heroku/vendor/lib
 LIBRARY_PATH:     /app/.heroku/vendor/lib
 PATH:             /app/.heroku/venv/bin:/bin:/usr/local/bin:/usr/bin   
 PYTHONHASHSEED:   random
 PYTHONHOME:       /app/.heroku/venv/
 PYTHONPATH:       /app/
 PYTHONUNBUFFERED: true

次のコマンドでこれらの新しい変数を削除しました。

 heroku config:remove PYTHONPATH PYTHONHOME LANG LD_LIBRARY_PATH PYTHONHASHSEED LIBRARY_PATH

私のアプリは再び動き始めました。より多くのコードをプッシュしてきましたが、この問題は再発していません。

私が行ったのは git push だけだったので、なぜ/どのようにこれらの変数が最初に追加されたのか、今でも本当に興味があります。

于 2012-10-04T06:45:51.980 に答える
2

これも私を噛みました。いつ始まったのかわかりません。私の側での変更に対応したものではないと思います。今日、私のサイトでアプリケーションエラーに気づき、ログでこれを見つけました。

2012-12-12T16:02:06+00:00 heroku[web.1]: State changed from crashed to starting
2012-12-12T16:02:09+00:00 heroku[web.1]: Starting process with command `aspen --network_address=:40856 --www_root=doc/ --project_root=doc/.aspen`
2012-12-12T16:02:10+00:00 app[web.1]: ImportError: No module named site
2012-12-12T16:02:11+00:00 heroku[web.1]: Process exited with status 1
2012-12-12T16:02:11+00:00 heroku[web.1]: State changed from starting to crashed

別のリリースの準備ができていたので、いつものようにデプロイしました。後git push heroku、サイトはバックアップされます。heroku config上記の追加のenvvarはありません:

$ heroku config
=== aspen-io Config Vars
ASPEN_IO_SHOW_GA: yes
PATH:             bin:/usr/local/bin:/usr/bin:/bin
PYTHONUNBUFFERED: true

更新: @kennethreitzは私これを指摘しました:

モジュールサイトをインポートできません

これは、構成された環境変数がインストールされたPythonのパスと一致しない場合に発生します。これが発生した場合、上記の影響を理解せずに誰かがアプリのキャッシュを削除したことが原因です。

修正するには、キャッシュを削除して構成を更新するか、予想される構成を復元します(推奨)。

于 2012-12-12T16:08:40.230 に答える