したがって、これはこのセットアップで非常に一般的な問題のようですが、SOで機能する解決策は見つかりません。非常に新しいUbuntu15.04サーバーをセットアップしてから、nginx、virtualenv(および-wrapper)、およびuWSGI(apt-getを介して、virtualenv内ではなくグローバルに)をインストールしました。
私のvirtualenvは/root/Env/example
にあります。 virtualenv内にDjangoをインストールし、/ srv/www/example/appでプロジェクト名startproject
を指定してDjangoのexample
コマンドを実行したので、漠然とこの構造になっています。
-root
-Env
-example
-bin
-lib
-srv
-www
-example
-app
-example
manage.py
-example
wsgi.py
...
UWSGIのexample.iniファイルは次のようになります。
[uwsgi]
project = example
plugin = python
chdir = /srv/www/example/app/example
home = /root/Env/example
module = example.wsgi:application
master = true
processes = 5
socket = /run/uwsgi/app/example/example.socket
chmod-socket = 664
uid = www-data
gid = www-data
vacuum = true
しかし、これをuwsgi --ini /etc/uwsgi/apps-enabled/example.ini
経由で実行するかデーモン経由で実行するかに関係なく、まったく同じエラーが発生します。
Python version: 2.7.9 (default, Apr 2 2015, 15:37:21) [GCC 4.9.2]
Set PythonHome to /root/Env/example
ImportError: No module named site
Djangoプロジェクトは組み込みの開発サーバー./manage.py runserver
を介して機能し、home = /root/Env/example
を削除すると機能することに注意してください(ただし、明らかにグローバルを使用しています) PythonおよびDjango virtualenvバージョンではなく、適切なvirtualenvセットアップには役に立たないことを意味します)。
誰かが私が見ていない明らかなパスエラーを見ることができますか?私の知る限り、home
は私のディレクトリ構造に基づいて完全に正しいだけでなく、iniの他のすべても正しいのに、なぜこのImportErrorで機能しないのでしょうか。
私の場合、この問題が発生したのは、実行しようとしたDjangoアプリがpython 3で記述されていたのに対し、uwsgiはpython 2.次の方法で問題を修正しました:
plugins = python35 # or whatever you specified while compiling uwsgi
Djangoを使用している他の人は、以下を正しく指定していることも確認する必要があります。
# Django dir that contains manage.py
chdir = /var/www/project/myprojectname
# Django wsgi (myprojectname is the name of your top-level project)
module = myprojectname.wsgi:application
# the virtualenv you are using (full path)
home = /home/ubuntu/Env/mydjangovenv
plugins = python35