Back to Blog

Gunicorn実行時にFailed to find attribute ‘app’ in ‘app’.というエラーが出た時の対処方法

flask

2024年10月7日

こんにちは!

今回の記事では、Gunicorn実行時にFailed to find attribute ‘app’ in ‘app’.というエラーが出た時の対処方法について解説したいと思います。

上記のエラーが出た方はぜひ参考にしてください。

エラーがでた状況

まずは、エラーが出た状況について解説します。

Flaskのアプリケーションで、Blueprintを使って機能を分割していました。

アプリケーションを本番環境へリリースするために、以下のコマンドを実行しました。

gunicorn app:app

コマンドを実行すると、以下のエラーが出ました。

[2024-10-07 08:51:22 +0900] [2457] [INFO] Starting gunicorn 22.0.0
[2024-10-07 08:51:22 +0900] [2457] [INFO] Listening at: http://127.0.0.1:8000 (2457)
[2024-10-07 08:51:22 +0900] [2457] [INFO] Using worker: sync
[2024-10-07 08:51:22 +0900] [2458] [INFO] Booting worker with pid: 2458
Failed to find attribute 'app' in 'app'.
[2024-10-07 08:51:22 +0900] [2458] [INFO] Worker exiting (pid: 2458)
[2024-10-07 08:51:23 +0900] [2457] [ERROR] Worker (pid:2458) exited with code 4
[2024-10-07 08:51:23 +0900] [2457] [ERROR] Shutting down: Master
[2024-10-07 08:51:23 +0900] [2457] [ERROR] Reason: App failed to load.

【関連】FlaskでBuleprintを導入する方法を解説

Failed to find attribute ‘app’ in ‘app’.とは?

Failed to find attribute ‘app’ in ‘app’.を日本語に訳すと、「’app’で属性’app’が見つかりませんでした。」となります。

これは、gunicornがappという名前の属性をappモジュール内で見つけられなかったことを示しています。

今回、app.pyを以下のように定義していました。

from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

このコードは、create_app()関数を呼び出してappというFlaskアプリケーションインスタンスを作成しています。

gunicornが最初に読み込むのはappというモジュールです。

モジュール内にappという名前の属性(Flaskインスタンス)が直接存在しないため、エラーが発生しています。appはcreate_app()から生成されたインスタンスであり、create_app()を実行しない限りgunicornはapp属性を見つけられません。

【関連】FlaskやDjangoで使われるGunicornとは何か?

解決策

この場合、gunicornに対して正しいFlaskアプリケーションインスタンスを提供するためには、次のように実行する必要があります。

gunicorn app:create_app

これにより、create_app関数が呼び出され、Flaskアプリケーションインスタンスが正しく生成されます。

gunicorn app:create_appと指定することで、gunicornはappモジュールの中にあるcreate_app関数を呼び出し、その結果として生成されたFlaskアプリケーションインスタンスを使ってサーバーを立ち上げます。

この方法は、特に複雑な設定やBlueprintを使う場合に便利です。

まとめ

今回の記事では、Gunicorn実行時にFailed to find attribute ‘app’ in ‘app’.というエラーが出た時の対処方法について解説しました。

今回は、Blueprintを使った構成だったため、Gunicornの起動も少し異なる状況になりました。同じ状況で不具合が出た方は、今回の記事を参考にしてください。

今回の記事が何かのお役になれば幸いです。

ここまでお読みいただきありがとうございました。

             

Pythonの基礎から応用まで学べる
Python WebAcademy

Python WebAcademyでは、Pythonの基礎からアーキテクチャなどの応用的な内容まで幅広く学べます。また、ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。

無料で試す