web-dev-qa-db-ja.com

Gunicornがロードに失敗しましたFlaskアプリケーション

私はFlaskアプリを持っています。Gunicorn経由で配信しようとしています。

Virtualenvとpython3を使用しています。 venv cdをアクティブ化してアプリのベースディレクトリに移動すると、次のコマンドを実行します。

gunicorn mysite:app

私は得ます:

Starting gunicorn
Listening at http://127.0.0.1:8000
DEBUG:mysite.settings:>>Config()
...
Failed to find application: 'mysite'
Worker exiting
Shutting down: master
Reason: App failed to load

/ etc/nginx/sites-availableを確認すると、「デフォルト」のファイルしかありません。サイト対応では、ファイルがありません。

私のnginx.confファイルに私はあります:

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

アプリの構造:

mysite    #this is where I cd to and run gunicorn mysite:app
--manage.py
--/mysite
----settings.py
----__init__.py

manage.py mysiteについては、次のようにしています。

logger.debug("manage.py entry point")
app = create_app(app_name)
manager = Manager(app)

if __name__ == "__main__":
    manager.run()

__init__.pyファイル:

def create_app(object_name):
    app = Flask(__name__)
    #more setup here
    return app

私のsettings.pyアプリディレクトリ内

class Config(object):
    logger.debug(">>Config()")  #this logs OK so gunicorn is at least starting in correct directory

Virtualenvの中から実行すると

print(sys.path)

pythonへのパスと、このvirtualenvのサイトパッケージを見つけました。

Gunicornを開始するために読んだことから、それをインストールしてgunicorn mysite:appを実行するだけです。

Mysiteの親ディレクトリからgunicornを実行すると、同じアプリケーションが見つかりませんでした。開始する)。 mysite/mysiteからgunicornを実行すると(明らかに間違っています)、ワーカープロセスの前に例外が発生します。ImportError: 'mysite'という名前のモジュールはありません。

Gunicornを実行する方法についての手がかりはありますか?

19
Don Smythe

あなたはmysite:appでgunicornを指しています。これはfrom mysite import appと同等です。ただし、appの最上位(__init__.py)レベルのインポートにはmysiteオブジェクトはありません。グニコーンに工場を呼ぶように言ってください。

gunicorn "mysite:create_app()"

呼び出しに引数を渡すこともできます。

gunicorn "mysite:create_app('production')"

内部的には、これは次と同等です。

from mysite import create_app
app = create_app('production')

または、セットアップを行う別のファイルを使用できます。あなたの場合、manage.pyappをすでに初期化しています。

gunicorn manage:app
36
davidism