LoginSignup
25
19

More than 5 years have passed since last update.

uwsgiデプロイ時に "no python application found"と出る場合

Last updated at Posted at 2018-03-14

解決策

アプリケーションのルートに移動し、pythonインタラクティブシェルから直接wsgi.pyをインポートし詳細なエラー情報を得る。

問題

今回、新たなdjangoアプリケーションのiniファイルを設定・起動した所、ログに以下のエラーが表示されました。

uwsg-my_app.log
no python application found, check your startup logs for errors

このエラー、詳細が表示されないので、原因がわからず困惑する人が多いようです。私も上記エラーが出て小一時間悩みました。上記エラーが出る原因は様々ですが、詳細が分からない事には対処しようがないので、詳細なエラーを出すことを主眼にします。

障害切り分け

以下のような設定ファイルでdjangoアプリケーションをuwsgiで運用していると仮定します。
必要なところだけかいつまんで記載します。

uwsgi-my_app.ini
[uwsgi]
chdir = /home/www/my_app
wsgi-file = /home/www/my-app/config/wsgi.py
module = config.wsgi:application
socket = /tmp/uwsgi-my_app.sock
logto = /var/log/uwsgi-my_app.log

大雑把に言うと、

  • アプリケーションルート/home/www/my_appに移動する
  • wsgi.pyからmy_appのアプリケーションをロードする
  • UNIXドメインソケット/tmp/uwsgi-my_app.sockをWebサーバとの通信に用いる
  • /var/log/uwsgi-my_app.logにエラーを出力する

と言った感じです。

ログの表示、及び出力ファイルを見たところ、

  • chdirは正常に行われている
  • ソケットは正常に作られている
  • ログも出力されている

ことを確認しました。

エラーがあるとすればwsgi.pyによるアプリケーションのロードに問題があると思われます。

解析

乱暴に言ってしまえば、uwsgiがやっていることは、アプリケーションルートに移動し指定のwsgi.pyをロードし、その出力をソケットに流すだけです。
それで、手動(pythonのインタラクティブシェル)でwsgi.pyをロードしてみます。

$ cd /home/www/my-app
$ python

>>> import config.wsgi

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "config/wsgi.py", line 16, in <module>
    application = get_wsgi_application()
  File "/usr/local/lib/python2.7/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/usr/local/lib/python2.7/site-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/usr/local/lib/python2.7/site-packages/django/apps/config.py", line 90, in create
    module = import_module(entry)
  File "/usr/local/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named master
  • 上記を見ると、my_app/masterというモジュールのロードに失敗しているようです。
  • 確認した所、master/以下に__init__.pyがありませんでした。それでpythonモジュールとしてロードすることができず、処理がコケていたようです。
  • master/__init__.pyを作成し、正常にデプロイされました。

結論

上記の例は単なる凡ミスによるエラーでしたが、uwsgiのログで「No python application found」とだけ出る場合、pythonアプリケーションのロード処理が失敗している可能性が高いので、pythonインタラクティブシェルから詳細なエラー情報を取得し、対処するのが良さそうです。

25
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
19