web-dev-qa-db-ja.com

python + uWSGI + nginxスタックの "no Django application found check yourstartuplogs"エラーを解決する方法

私はユーザーDjango 1.10 with uWSGI and nginx on ubuntu 16.04 and deploy with my app with ansible。私のプロジェクトにはデフォルトの構造はありませんが、かなり一般的です(これについては2つのスクープに感謝します:)。私はsplitdevを使用します。代わりに「name」プロジェクトフォルダの本番設定とconfigフォルダ。次のようになります。

|-- config
|   |-- __init__.py
|   |-- settings
|   |   |-- __init__.py
|   |   |-- base.py
|   |   `-- dev.py
|   |-- urls.py
|   |-- wsgi_dev.py
|   `-- wsgi_production.py
|-- manage.py
`-- requirements.txt

僕の production.pyセキュリティ暗号化を使用してansibleから生成し、config/settingsで検索します。

この設定では、「no python application found check yourstartuplogs」が表示されます。Uwsgiにアプリケーションが表示されません。

({{}}これはansibleのjinja2構文です)

/etc/uwsgi/sites/{{ project_name }}

[uwsgi]
chdir = {{ Django_root }}
home = /home/{{ project_user }}/venvs/{{ project_name }}
module = config.wsgi_production:application

master = true
processes = 5

socket = /run/uwsgi/{{ project_name }}.sock
chown-socket = {{ project_user }}:www-data
chmod-socket = 660
vacuum = true
5
Denis Savenko

数週間後、wsgi.pyに問題が見つかりました。一般的な解決策は、os.environ['ENV']Django_SETTINGS_MODULEを使用しますが、ユーザーと権限が異なると、機能しません。

wsgi.pyファイルで次のようなものを使用する場合:

os.environ["Django_SETTINGS_MODULE"] = "config.settings." + os.environ["ENV"]

そして、no python application foundに問題があります-wsgiファイルを分割します。 os.environ["ENV"]が空の文字列を返すことをキャッチできます。私はすべてのユーザーのためにそれを追加し、ソースなどを使用します。しかし、エンペリアモードのuwsgiはそれを表示しません。 wsgi_dev.pywsgi_production.pyを使用して、このos.environ["Django_SETTINGS_MODULE"] = "config.settings.production"のような何かを書くことができます。それほどエレガントではありませんが、この問題をうまく解決します。

分割wsgiを使用するには、wsgi.pyに次のように記述できます。

import os

from Django.core.wsgi import get_wsgi_application

if os.environ.get('DEV') is True:
   os.environ.setdefault("Django_SETTINGS_MODULE", "config.settings.dev")
else:
   os.environ.setdefault("Django_SETTINGS_MODULE", 
   "config.settings.production")

application = get_wsgi_application()
7
Denis Savenko