私は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を実行する方法についての手がかりはありますか?
あなたは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.py
でapp
をすでに初期化しています。
gunicorn manage:app