2012-01-07 17 views
2

Apache/mod_wsgiにロードされた私のdjangoアプリケーションがsys.pathで指定したにもかかわらず、私の外部パッケージを見つけることができませんでしたか?次のようにmod_wsgiで私のpythonパッケージが見つかりません?

セットアップは次のとおりです。

a)は、外部のパッケージはは/ var/www /のサイト/私/パイソン/ configに

settings.pyファイルとb)はDjangoのウェブサイト()でありますsettings.pyファイルには、次で始まる)

import os, sys 
sys.stdout = sys.stderr 

# Add the virtual Python environment site-packages directory to the path 
import site 
site.addsitedir('/var/www/virtualenv/lib/python2.6/site-packages') 

# Avoid ``[Errno 13] Permission denied: '/var/www/.python-eggs'`` messages 
os.environ['PYTHON_EGG_CACHE'] = '/var/www/egg-cache' 

# Add project directory to PYTHONPATH 
sys.path.append('/var/www/site') # <---- THIS SHOULD FIND EXTERNAL PACKAGES? 
os.environ['DJANGO_SETTINGS_MODULE'] = 'domain.settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

D:

WSGIの設定ファイルがある)、C

の/ var/www /のサイト/ドメインであります
print "prior to import" 
from my.python.config import ConfigParser # <---- THIS EXIST AS INDICATED IN a), but fails! 
print after to import" 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

ADMINS = (
    # ('Your Name', '[email protected]'), 
) 

MANAGERS = ADMINS 

.... 

私は取得していますエラーは次のとおりです。

prior to import 
mod_wsgi (pid=3465): Exception occurred processing WSGI script '/var/www/mod_wsgi/django.wsgi'. 
Traceback (most recent call last): 
    File "/var/www/virtualenv/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 250, in __call__ 
    self.load_middleware() 
    File "/var/www/virtualenv/lib/python2.6/site-packages/django/core/handlers/base.py", line 39, in load_middleware 
    for middleware_path in settings.MIDDLEWARE_CLASSES: 
    File "/var/www/virtualenv/lib/python2.6/site-packages/django/utils/functional.py", line 276, in __getattr__ 
    self._setup() 
    File "/var/www/virtualenv/lib/python2.6/site-packages/django/conf/__init__.py", line 42, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/var/www/virtualenv/lib/python2.6/site-packages/django/conf/__init__.py", line 89, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
ImportError: Could not import settings 'domain.settings' (Is it on sys.path?): No module named python.config 

あなたはsettings.pyファイルを印刷が、「私のインポートのコードfailesさ「をインポートする前に」としてロードしようとしていることがわかります.python.config.ConfigParser "を参照してください。それは代わりにpython.configとしてそれを検出するようだ?

手がかりはありますか?

私は一日中私の髪を裂いています。しかし、すべてがEclipse環境と、Pythonパスとdjango環境変数を設定した後で、 'django-admin.py runserver 80'を直接呼び出すことで動作します。私はまた、pythonのパスがsys.pathにあることを確認しました。

私は考えがなくなったので、どんな助けでも大歓迎です!

+0

settings.pyファイルに "'をインポートするために ''実際にプリントする '''後にプリントする' 'ではありません。 – mtnpaul

+0

はい、それは間違いなくメッセージを入力している間に – noobzie

答えて

0

あなたは私のディレクトリ内に存在する必要があります__init__.py my.python.config、Pythonのディレクトリとconfigディレクトリにアクセスするときは、すべてのサブディレクトリおよびVAR/www /のサイト

/の子で__init__.pyを持っていますか。

権限に関しては、wsgiはapacheユーザー(wsgi.confで指定したユーザー)として実行されます。 世話してください。

+0

__init__.py既存の設定とアクセス許可の設定がすべて正しいです。ありがとうございます。 – noobzie

1

はsettings.pyの開始時に追加します。

import my 
print my.__file__ 

検証してプリントアウトパスはあなたが期待する「私の」パッケージのためのものであること。

つまり、このパッケージが複数の場所に存在し、sys.pathの順序が間違っているため、別の「my」パッケージが選択されている可能性があります。

また、あなたが読んで行くことを確認してください:のsys.pathの順序の問題について語っ

http://code.google.com/p/modwsgi/wiki/VirtualEnvironments

を。

+0

sys.pathの順序を変更しても指示通りに動作せず、 'print my .__ file__'は表示されず、正しいパッケージではないことが示唆されました。しかし、私はeclipse/pydevと 'django-dadmin.py runserver'の両方のコマンドが両方とも動いていると、mod_wsgiが混乱する可能性のあるものは見当たりません。 私は/ etc/fstabにマウントして使用しますが、元のディレクトリはApacheに設定されています。これがApacheではうまくいかない理由は何ですか? – noobzie

+0

「print my .__ file__」と表示されなかった場合、印刷できませんでした。 Apacheを再起動しましたか? 'my'のインポートが成功した場合は、何かを出力する必要があります。 'myをインポートする'の後に別のプリントを入れて、そのようにしたら 'my'をインポートすることに成功したかどうかを確認します。 –

+0

申し訳ありませんので、さらに絞り込んでいます。私が発見したのは、ソースtarファイルをダウンロードしてターゲットにuntarすると動作するということです。しかし、もし私がそれを解凍すると、ターゲット内のトップディレクトリを作成し、まったく同じレイアウトでコンテンツを移動させます。それは動作しませんし、mod_wsgi/apacheはファイルを見つけることができません。私はこれが許可と関係していると仮定しています(ただし、すべてのファイルに世界の読みやすさがあります)。ディレクトリ/ファイルレイアウトのパーミッションを比較する方法はありますか? – noobzie

関連する問題