私は次のApache設定で小さなDjangoプロジェクトを提供しようとしています:
Apache仮想ホスト設定:
<VirtualHost *>
ServerName servername
[...]
<Directory "/path/to/project/project">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project python-path=/path/to/project:/path/to/Envs/venv/lib/python3.5/site-packages
WSGIScriptAlias / /path/to/project/project/wsgi.py
</VirtualHost>
また、次のwsgi.pyもあります。
import os
from Django.core.wsgi import get_wsgi_application
os.environ.setdefault("Django_SETTINGS_MODULE", "example.settings")
application = get_wsgi_application()
STATICファイルとMEDIAファイルを提供しても問題ありません。
また、アクセス許可を確認し、755、次に777をvirtualenvのサイトパッケージディレクトリに再帰的に使用しようとしました。うまくいきませんでした。
しかし、私のサイトのルートに到達しようとすると、次のようになります:
from Django.core.wsgi import get_wsgi_application
ImportError: No module named 'Django'
Djangoが私のvirtualenvにインストールされているため、これはPythonパス関連の問題であると推測しました。 python WSGIDaemonProcess
のpython-path
属性へのパスなので、なぜ機能しないのかわかりません。
関連するディレクトリをPython site
モジュールを使用してwsgi.pyのパスに追加 に追加できますが、なぜ私が試したApacheの設定が十分ではないのかを理解するために。
WSGIProcessGroup
のWSGIScriptAlias
ディレクティブまたは同等のオプションがないため、仮想環境を設定したデーモンプロセスグループで実際にアプリケーションが実行されていません。
mod_wsgiデーモンモードの使用 を参照してください
デーモンプロセスグループで実行している唯一のアプリケーションである場合は、アプリケーショングループが '%{GLOBAL}'に設定されていることを確認することもお勧めします。
したがって、次を使用します。
WSGIScriptAlias / /path/to/project/project/wsgi.py \
process-group=project application-group=%{GLOBAL}
また、python-home
仮想環境の場合。
WSGIDaemonProcess project python-path=/path/to/project \
python-home=/path/to/Envs/venv
見る:
私の担当者は50を超えていないためコメントできませんが、発見を共有したいと思います。
WSGIDaemonProcessでは、Python 3.5を使用している場合、@ graham-dumpletonが言うとおりに設定する必要があります。
python-home=/path/to/Envs/venv
明示的に設定します。
ただし、Python 3.4(または、私の知る限り2.7のような古いバージョン)Python)を使用している場合、次のように設定する必要があります。
python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages
質問者がしたことと同じように。
本当に変だ。
私にとって問題は、python2用にmod wsgiをインストールしていたことでした。私はpython3のためにそれを再インストールする必要がありました:
Sudo apt-get install libapache2-mod-wsgi-py3