14

シンプルなフラスコアプリでherokuでgunicornを実行できません。
アプリケーションは本当に簡単です。これは app.py です:

app = Flask(__name__)

@app.route("/")
def say_hello(url):
    return "Hello"


if __name__ == "__main__":
    port = int(os.environ.get('PORT', 8888))
    app.run(host='0.0.0.0',port=port)

アプリは heroku のフラスコ テスト サーバーを介して正常に動作しますが、gunicorn を使用するように切り替えると、次のようにクラッシュします。

ImportError: No module named app.wsgiapp

私の要件.txt:

Flask==0.8
gevent==0.13.7
gunicorn==0.13.2

0.13.7 から 0.14.6 までのさまざまなバージョンの gunicorn を試しましたが、成功しませんでした。

プロファイル:

web: gunicorn app:app -w 4 -b 0.0.0.0:$PORT

次のコマンドを実行します。

heroku logs

これを与える:

←[33m2012-08-09T21:08:02+00:00 app[web.1]:←[0m ImportError: No module named app.
wsgiapp ←[33m2012-08-09T21:08:02+00:00 app[web.1]:←[0m     entry = __import__(self.modul
e_name, globals(),globals(), ['__name__'])

何か助けてください。

4

4 に答える 4

11

私の場合、gunicorn.py最上位フォルダーにファイルがあると、このエラーが発生しました。これは、Heroku にインストールされている gunicorn ライブラリと衝突しました。

したがって、問題を引き起こした実行コマンドは次のとおりです。

gunicorn -c gunicorn.py myapp:main

次のエラーが発生します。

Traceback (most recent call last):
  File "/app/.heroku/python/bin/gunicorn", line 9, in <module>
    load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')()
  File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 378, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 2566, in load_entry_point
    return ep.load()
  File "/app/.heroku/python/lib/python2.7/site-packages/pkg_resources.py", line 2260, in load
    entry = __import__(self.module_name, globals(),globals(), ['__name__'])
ImportError: No module named app.wsgiapp

それに対して、mv gunicorn.py gunicorn_config.pyそれはうまくいきました:

gunicorn -c gunicorn_config.py myapp:main
于 2015-01-14T11:04:58.430 に答える
3

私はついにこれを理解しました。

これは基本的に単なる PATH の問題です。セットアップに応じて特定のモジュール ( ossysなど) を間違った順序でインポートすると、Gunicorn が間違ったパッケージでapp.wsgiappモジュールを検索する原因になります。(Flask のapp.wsgi_app関数と混同しないでください)

正しいインポート順序はセットアップによって異なりますが、私が作業できたことに基づく経験則は、sysモジュールがosモジュールの前にインポートされることを確認することでした。

それを超えて、構成の残りの部分が正常であると仮定すると (上記のように)、問題は発生しないはずです。

注: これは、Gunicorn を使用する HEROKU のみの問題です。PYTHONPATH とモジュール検索パスの設定方法に関係があります。正確な理由はわかりませんが、これは運用環境でのみ必要です。ローカル セットアップは、モジュールのインポート順序に関係なく正常に動作します。

于 2012-12-16T21:01:57.083 に答える
1

私の推測では、Python パスに別の「アプリ」モジュールがあると思います (gunicorn とフラスコの両方に app というモジュールが既にあります)。app.py 以外の名前に変更すると、動作するはずです。

于 2012-08-17T21:01:37.627 に答える