0

centos 6.3 サーバーで python 2.7 + Django + virtualenv + mod_wsgi 環境をセットアップして、Apache を介して Python アプリケーションを実行しようとしています。しかし、Apache を介してアプリケーションにアクセスしようとすると、内部エラーが発生します。エラーログには以下が表示されます。

============

[Fri Nov 15 04:20:30 2013] [error] [client 117.201.194.54] mod_wsgi (pid=20361): Target WSGI script '/var/www/html/djangosites/spark.wsgi' cannot be loaded as Python module.

[Fri Nov 15 04:20:30 2013] [error] [client 117.201.194.54] mod_wsgi (pid=20361): Exception occurred processing WSGI script '/var/www/html/djangosites/spark.wsgi'.

Fri Nov 15 04:20:30 2013] [error] [client 117.201.194.54] ImproperlyConfigured: Requested setting DEBUG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

============

テストサーバーとして実行すると問題なく動作します。

======

(virtualenv)[root@lampserver spark]# python manage.py runserver 0.0.0.0:8080
Validating models...

0 errors found
November 15, 2013 - 09:15:19
Django version 1.6, using settings 'spark.settings'
Starting development server at 0.0.0.0:8080
Quit the server with CONTROL-C.

====

spark.wsgi ファイルは次のようになります。

===========

import sys
import site
import os

vepath = '/var/www/html/virtualenv/lib/python2.7/site-packages'

prev_sys_path = list(sys.path)

site.addsitedir(vepath)

sys.path.append('/var/www/html/djangosites')

new_sys_path = [p for p in sys.path if p not in prev_sys_path]

for item in new_sys_path:

    sys.path.remove(item)

sys.path[:0] = new_sys_path

from django.core.handlers.wsgi import WSGIHandler

os.environ['DJANGO_SETTINGS_MODULE'] = 'spark.settings'

application = WSGIHandler()

==============

Apache conf の wsgi のエントリは次のようになります。

============

[root@lampserver djangosites]# cat /etc/httpd/conf.d/django.conf 


LoadModule wsgi_module modules/mod_wsgi.so
AddHandler wsgi-script .wsgi

WSGIScriptAlias / /var/www/html/djangosites/spark.wsgi

WSGIDaemonProcess spark processes=5 threads=15 display-name=%{GROUP}

WSGIProcessGroup spark

WSGIApplicationGroup %{GLOBAL}

WSGISocketPrefix /var/run/wsgi

=================

Apache はユーザー「apache」として実行されています。

私のプロジェクト ファイルと権限を以下に示します。

===========

root@lampserver djangosites]# pwd

var/www/html/djangosites

[root@lampserver djangosites]# ls

spark  spark.wsgi

[root@lampserver djangosites]# ll
total 8

drwxr-xr-x 3 apache apache 4096 Nov 15 02:38 spark

-rwxrwxrwx 1 apache apache  535 Nov 15 03:16 spark.wsgi

[root@lampserver djangosites]# cd spark/

manage.py  spark/     

[root@lampserver spark]# ll
total 8

-rwxr-xr-x 1 apache apache  248 Nov 15 02:38 manage.py

drwxr-xr-x 2 apache apache 4096 Nov 15 03:05 spark

[root@lampserver spark]# cd spark/

[root@lampserver spark]# ll
total 28
-rw-r--r-- 1 apache apache    0 Nov 15 02:38 __init__.py

-rw-r--r-- 1 apache apache  136 Nov 15 02:40 __init__.pyc

-rw-r--r-- 1 apache apache 1969 Nov 15 02:38 settings.py

-rw-r--r-- 1 apache apache 2142 Nov 15 02:40 settings.pyc

-rw-r--r-- 1 apache apache  296 Nov 15 02:38 urls.py

-rw-r--r-- 1 apache apache  416 Nov 15 02:40 urls.pyc

-rwxr-xr-x 1 apache apache  385 Nov 15 02:38 wsgi.py

-rw-r--r-- 1 apache apache  589 Nov 15 02:40 wsgi.pyc

==================

誰でも私の設定の問題を特定できますか?

よろしく

4

2 に答える 2

0

次のようなもっと単純なもので wsgi を変更してみてください:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "spark.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

多分これは問題をより簡単に検出するのに役立ちます

もちろん、Apache構成ファイルのディレクティブを変更して、デフォルトのwsgiファイル(spark/wsgi.py)の代わりに使用してください。これは、サイト設定を含むより単純な apache 構成ファイルの例です。これをテストして、お知らせください。spark.wsgiWSGIScriptAlias

WSGIPythonPath /var/www/html/djangosites:/var/www/html/virtualenv/lib/python2.7/site-packages
WSGIPassAuthorization On
WSGIScriptAlias / /var/www/html/djangosites/spark/wsgi.py

<Directory /var/www/html/djangosites/spark>
    <Files wsgi.py>
        Order allow,deny
        Allow from all
     </Files>
</Directory>
于 2013-11-15T13:24:10.647 に答える
0

spark.wsgi次の行をファイルに追加します。

sys.path.append('/var/www/html/djangosites/spark')

あなたのdjangoサイトはそのディレクトリにあるので

于 2013-11-15T15:31:52.400 に答える