3

私が抱えている問題は、wsgiファイルがwsgiハンドラーを正しくインポートできないことです。

/var/log/apache2/error.logレポート:

ImportError:django.core.handlers.wsgiという名前のモジュールがありません

www-dataこれをグーグルで検索すると、いくつかの結果が表示されます。特定のファイルを読み取れないか、pythonpathが正しくないため、主に権限エラーを処理します。解決策のいくつかは曖昧であるか、私の状況では機能しません。

背景情報..

私の/usr/libディレクトリ。

/usr/lib/python2.4
/usr/lib/python2.5
/usr/lib/python2.6
/usr/lib/python-django

デフォルトのPythonバージョンは2.5.2です。通訳を通常のユーザーとして開くimport django.core.handlers.wsgiと、問題なく実行できます。

Pythonバージョンに切り替えてwww-dataも同じで、django.core.handlers.wsgiモジュールを問題なくインポートできます。

bashrcで、PYTHONPATHをすべてのdjangoサイトを含むホームディレクトリに設定しました...

export PYTHONPATH=/home/meder/django-sites/:$PYTHONPATH

したがって、ディレクトリ構造は次のとおりです。

django-sites/
   test

testによって作成されたディレクトリですdjango-admin createproject

私の仮想ホスト:

<VirtualHost *:80>
    ServerName beta.blah.com
    WSGIScriptAlias / /home/meder/django-sites/test/apache/django.wsgi
    Alias /media /home/meder/django-sites/test/media/
</VirtualHost>

/home/meder/django-sites/test/apache/django.wsgiファイル自体:

import os, sys

sys.path.append('/usr/local/django')
sys.path.append('/home/meder/django-sites')
sys.path.append('/home/meder/django-sites/test')
os.environ['DJANGO_SETTINGS_MODULE'] = 'test.settings'

import django.core.handlers.wsgi

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

最後に、私のOSはDebian Lennyで、バックポートからdjango1.1.1を取得しました。それが十分な情報であることを願っています。

更新#1-最初の返信ごとに、次の結果が得られldd /usr/lib/apache2/modules/mod_wsgi.soます:

meder@site:/usr/lib/apache2/modules$ ldd mod_wsgi.so
    libpython2.5.so.1.0 => /usr/lib/libpython2.5.so.1.0 (0xb7d99000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xb7d81000)
    libdl.so.2 => /lib/libdl.so.2 (0xb7d7c000)
    libutil.so.1 => /lib/libutil.so.1 (0xb7d78000)
    libm.so.6 => /lib/libm.so.6 (0xb7d52000)
    libc.so.6 => /lib/libc.so.6 (0xb7c14000)
    /lib/ld-linux.so.2 (0xb7efd000)

したがって、2.4ではなくPython2.5に対してコンパイルされます。

4

3 に答える 3

2

私は Debian を使用しているので、django は含まれているようですが、含まれ/usr/lib/pymodules/python2.5ていないよう/usr/lib/python2.5/site-packagesです。

追加した

sys.path.append('/usr/lib/pymodules/python2.5') 

私の wsgi ファイルの先頭に追加すると、それで完了しましたが、これをより適切な方法で修正する必要があるように感じます。

于 2010-02-05T15:55:16.143 に答える
1

あなたの問題はsys.pathにあるとは思いません。私はいつもデーモン化されたプロセスを使用して Django で Mod_WSGI を使用してきました。

# Note these 2 lines
WSGIDaemonProcess site-1 user=user-1 group=user-1 threads=25
WSGIProcessGroup site-1

Alias /media/ /usr/local/django/mysite/media/

<Directory /usr/local/django/mysite/media>
Order deny,allow
Allow from all
</Directory>

WSGIScriptAlias / /usr/local/django/mysite/apache/django.wsgi

<Directory /usr/local/django/mysite/apache>
Order deny,allow
Allow from all

最初の 2 行に注意すると、これを実行するグ​​ループとユーザーを指定できます。あなたの場合、www-dataはdjangoモジュールをインポートできるが、Apacheがそれをデプロイすると機能しないと述べています-おそらくプロセスは誰も実行していないか、このモジュールをインポートする権限を持たない他のユーザー/グループによって実行されています. DaemonProcess と Group の行を追加すると、問題が解決するはずです。

HTH。

[1] 参考までに - ここに Django Mod_WSGI のドキュメントがあります - http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

于 2010-02-05T18:52:12.180 に答える
0

mod_wsgi は Python 2.5 に対してコンパイルされておらず、代わりに Python 2.4 または 2.6 に対してコンパイルされているようです。走る:

ldd mod_wsgi.so

インストールされている mod_wsgi.so ファイルで、何を使用しているかを調べます。

異なる場合は、使用したいバージョンを使用するように、ソース コードから mod_wsgi を再コンパイルする必要があります。

于 2010-02-05T06:03:33.083 に答える