2016-08-04 18 views
6

私は、次のApacheの設定で少しDjangoプロジェクトにサービスを提供しようとしている:Apacheの 'ジャンゴ' という名前のモジュール

ApacheのVirtualHostの設定:

<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> 

私は静的ファイルやメディアファイルを提供するために何の問題もない

import os 
from django.core.wsgi import get_wsgi_application 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings") 
application = get_wsgi_application() 

:私はまた、次のwsgi.pyを持っています。

私もパーミッションをチェックし、再帰的に755を使用してから、777をvirtualenvのサイトパッケージディレクトリに使用しようとしました。それはうまくいかなかった。

しかし、私のサイトのルートに到達しようとしたとき、私は、次を得る:

from django.core.wsgi import get_wsgi_application 
ImportError: No module named 'django' 

私はジャンゴが、私はvirtualenvにインストールされているので、それは関連の問題Pythonパスであったことを推測しました。しかし、関連するpythonパスをWSGIDaemonProcesspython-path属性に追加しました。なぜそれが機能しないのか分かりません。

私もadd the relevant directory to my Python path in my wsgi.py by using the site moduleと思うかもしれませんが、なぜ私が試したApacheの設定では十分ではないのか理解したいと思います。私は何か見落としてますか?

答えて

15

WSGIScriptAliasWSGIProcessGroupディレクティブまたは同等のオプションがないため、アプリケーションが仮想環境を設定したデーモンプロセスグループで実際に実行されていません。

Using mod_wsgi daemon mode

を参照してください。また、私はそれはあなたがデーモンプロセスグループで実行されている唯一のアプリケーションであれば確実にアプリケーショングループが「{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 

参照:

2

私の担当者はので、私はコメントすることはできません50歳以上ではありませんが、私は私の発見を共有したいです。 WSGIDaemonProcessで

あなたは、Python 3.5を使用している場合、あなたはグラハム・dumpleton @として正確に設定する必要が明示的に設定

python-home=/path/to/Envs/venv 

と、言います。

しかし、あなたがPython 3.4(または2のような古いバージョンのPythonを使用している場合。7私の知る限りでは)、あなただけのアスカーが何をしたかのように

python-path=/path/to/project:/path/to/Envs/venv/lib/python3.4/site-packages 

としてそれを設定する必要があります。

本当に奇妙です。

+1

Python 3.4または2.7を使用している場合は、依然として '' python-home''を使用するべきです。私は '' python-path''を設定する以外の方法を使用することに問題はないことを知っていますが、単にあなたがしなければならないことではありません。 '' python-home''オプションは、長い間、仮想環境の場所を設定する最良の方法でした。古いmod_wsgiバージョンのLinuxディストリビューションでさえ、まだまだ機能するはずです。これは、ドキュメントがまだ更新されていない場合でもそうです。 :-) –

+0

@ graham-dumpletonご助言ありがとうございます。しかし、私の場合、私はpython 3.4を使用しています。設定はあなたが言及したように "python-home"の方法でした。しかし、Apacheは「Import Error:No site named 'site'」というエラーを送信し続けるため、私のサイトにアクセスすることはできません。私が「好きではない方法」に設定している限り、質問者のように「:」を使用すると、この問題は解決されました。そして、はい、Python 3.5の場合は、 "python-home"を使用するか、[ImportError: 'django'という名前のモジュールはありません]という問題が発生します。 – Valorad

+0

これは、あなたのmod_wsgiがそのバージョンのPython用に実際にはコンパイルされていないことを意味します。 mod_wsgiにコンパイルされたバージョンとは異なるPythonバージョンを使用させることはできません。 '' python-path''を使用する際の問題の1つは、間違ったことをして、mod_wsgiがコンパイルされたものとは異なるPythonバージョンのために仮想環境を使用するようmod_wsgiに強制しようとしたときにも表示されないことです。 '' python-home''を使うと、代わりに正しく失敗し、あなたが何か間違っていることを伝えます。 –

関連する問題