处理 WSGI 脚本时发生异常
Exception occured processing WSGI script
我正在尝试使用 Apache 配置 mod_wsgi
到 运行,这样我就可以在同一虚拟主机上使用 Apache 上的 Django,以及之前的 Apache+PHP 配置。我一直在尝试在 http://localhost/django
地址上 运行 我的 Django 应用程序。以下是我的配置:
$ cat /etc/httpd/sites-available/localhost.conf
<VirtualHost *:80>
ServerName localhost
ServerAdmin admin@localhost
# ServerAlias foo.localhost
WSGIScriptAlias /django /home/httpd/localhost/mysite/mysite/wsgi.py
DocumentRoot /home/httpd/localhost/public_html
ErrorLog /home/httpd/localhost/error.log
CustomLog /home/httpd/localhost/requests.log combined
</VirtualHost>
# vim: syntax=apache
$ ls -l /etc/httpd/sites-enabled/localhost.conf
lrwxrwxrwx 1 root root 41 Jan 17 08:21 /etc/httpd/sites-enabled/localhost.conf -> /etc/httpd/sites-available/localhost.conf
$ cat /etc/httpd/conf/httpd.conf
...
# Include virtual hosts
IncludeOptional sites-enabled/*.conf
$ cat /home/httpd/localhost/mysite/mysite/wsgi.py
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
$ ls -AR /home/httpd/localhost/
/home/httpd/localhost/:
django.wsgi error.log mysite public_html requests.log
/home/httpd/localhost/mysite:
db.sqlite3 manage.py mysite
/home/httpd/localhost/mysite/mysite:
__init__.py __pycache__ settings.py urls.py wsgi.py
/home/httpd/localhost/mysite/mysite/__pycache__:
__init__.cpython-34.pyc settings.cpython-34.pyc urls.cpython-34.pyc wsgi.cpython-34.pyc
/home/httpd/localhost/public_html:
index.php
当我转到 http://localhost/
时,我看到了脚本 /home/httpd/localhost/public_html/index.php
运行,正如预期的那样。但是,当我访问 http://localhost/django
时,出现 500 Internal Server Error。我在 /home/httpd/localhost/error.log
中得到以下堆栈跟踪(为了便于阅读,删除了时间戳和其他 [括号] 内容):
mod_wsgi (pid=16908): Target WSGI script '/home/httpd/localhost/mysite/mysite/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=16908): Exception occurred processing WSGI script '/home/httpd/localhost/mysite/mysite/wsgi.py'.
Traceback (most recent call last):
File "/home/httpd/localhost/mysite/mysite/wsgi.py", line 16, in <module>
application = get_wsgi_application()
File "/usr/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/usr/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/usr/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/usr/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/usr/lib/python3.4/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib64/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2212, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
ImportError: No module named 'mysite'
请注意 /home/httpd/localhost/mysite/
目录是由 django-admin.py
脚本创建的。
还要注意 运行ning ./manage.py runserver
工作正常。
试试这个,
将您的项目路径添加到 sys.path
import os
import sys
sys.path.append('/home/httpd/localhost/mysite')
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
您还没有将 Django 项目放在 Python 路径上。作为你的 wsgi 脚本的顶部:
import sys
sys.path.insert(0, '/home/httpd/localhost/mysite')
我正在尝试使用 Apache 配置 mod_wsgi
到 运行,这样我就可以在同一虚拟主机上使用 Apache 上的 Django,以及之前的 Apache+PHP 配置。我一直在尝试在 http://localhost/django
地址上 运行 我的 Django 应用程序。以下是我的配置:
$ cat /etc/httpd/sites-available/localhost.conf
<VirtualHost *:80>
ServerName localhost
ServerAdmin admin@localhost
# ServerAlias foo.localhost
WSGIScriptAlias /django /home/httpd/localhost/mysite/mysite/wsgi.py
DocumentRoot /home/httpd/localhost/public_html
ErrorLog /home/httpd/localhost/error.log
CustomLog /home/httpd/localhost/requests.log combined
</VirtualHost>
# vim: syntax=apache
$ ls -l /etc/httpd/sites-enabled/localhost.conf
lrwxrwxrwx 1 root root 41 Jan 17 08:21 /etc/httpd/sites-enabled/localhost.conf -> /etc/httpd/sites-available/localhost.conf
$ cat /etc/httpd/conf/httpd.conf
...
# Include virtual hosts
IncludeOptional sites-enabled/*.conf
$ cat /home/httpd/localhost/mysite/mysite/wsgi.py
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
$ ls -AR /home/httpd/localhost/
/home/httpd/localhost/:
django.wsgi error.log mysite public_html requests.log
/home/httpd/localhost/mysite:
db.sqlite3 manage.py mysite
/home/httpd/localhost/mysite/mysite:
__init__.py __pycache__ settings.py urls.py wsgi.py
/home/httpd/localhost/mysite/mysite/__pycache__:
__init__.cpython-34.pyc settings.cpython-34.pyc urls.cpython-34.pyc wsgi.cpython-34.pyc
/home/httpd/localhost/public_html:
index.php
当我转到 http://localhost/
时,我看到了脚本 /home/httpd/localhost/public_html/index.php
运行,正如预期的那样。但是,当我访问 http://localhost/django
时,出现 500 Internal Server Error。我在 /home/httpd/localhost/error.log
中得到以下堆栈跟踪(为了便于阅读,删除了时间戳和其他 [括号] 内容):
mod_wsgi (pid=16908): Target WSGI script '/home/httpd/localhost/mysite/mysite/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=16908): Exception occurred processing WSGI script '/home/httpd/localhost/mysite/mysite/wsgi.py'.
Traceback (most recent call last):
File "/home/httpd/localhost/mysite/mysite/wsgi.py", line 16, in <module>
application = get_wsgi_application()
File "/usr/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
django.setup()
File "/usr/lib/python3.4/site-packages/django/__init__.py", line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "/usr/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/usr/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/usr/lib/python3.4/site-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib64/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2212, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
ImportError: No module named 'mysite'
请注意 /home/httpd/localhost/mysite/
目录是由 django-admin.py
脚本创建的。
还要注意 运行ning ./manage.py runserver
工作正常。
试试这个,
将您的项目路径添加到 sys.path
import os
import sys
sys.path.append('/home/httpd/localhost/mysite')
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()
您还没有将 Django 项目放在 Python 路径上。作为你的 wsgi 脚本的顶部:
import sys
sys.path.insert(0, '/home/httpd/localhost/mysite')