私が使う gunicorn --workers 3 wsgi
を実行してFlask app。変数application
をmyapp
に変更すると、GunicornはエラーAppImportError: Failed to find application: 'wsgi'
。このエラーが発生する理由と修正方法を教えてください。
myproject.py
:
from flask import Flask
myapp = Flask(__name__)
@myapp.route("/")
def hello():
return 'Test!'
if __name__ == "__main__":
myapp.run(Host='0.0.0.0')
wsgi.py
:
from myproject import myapp
if __name__ == "__main__":
myapp.run()
Gunicorn(およびほとんどのWSGIサーバー)は、デフォルトで、application
またはapp
という名前の呼び出し可能オブジェクトを、指定したモジュールで探します。エイリアスを追加するfrom myproject import myapp as application
またはapplication = myapp
はGunicornにcallableを再び発見させます。
しかし wsgi.py
ファイルまたはエイリアスは必要ありません。Gunicornは実際のモジュールと呼び出し可能オブジェクトを直接指すことができ、引数を使用してアプリファクトリを呼び出すこともできます。別 wsgi.py
ファイルはほとんどの場合必要ありません。
gunicorn myproject:myapp --workers 16
# equivalent to "from myproject import myapp as application"
gunicorn 'myproject.app:create_app("production")' --workers 16
# equivalent to:
# from myproject.app import create_app
# application = create_app("production")
Gunicornは、その前のパスから「:」に続く名前をインポートします。括弧がある場合、名前を引数で呼び出してアプリケーションを取得します。そうでない場合、名前はアプリケーションであると想定されます。
server/app.py
内でapp
という名前のアプリを提供しようとしている場合、次のようにポート8000でサーバーを起動できます。
gunicorn server.app:app -b 0.0.0.0:8000