【问题标题】:Exception occured processing WSGI script处理 WSGI 脚本时发生异常
【发布时间】:2016-04-22 14:22:09
【问题描述】:

我正在尝试将mod_wsgi 配置为与 Apache 一起运行,这样我就可以在同一虚拟主机上的 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 脚本创建的。

另请注意,仅运行 ./manage.py runserver 可以正常工作。

【问题讨论】:

    标签: python django apache python-3.x fedora


    【解决方案1】:

    您尚未将 Django 项目放在 Python 路径上。在你的 wsgi 脚本的顶部:

    import sys
    sys.path.insert(0, '/home/httpd/localhost/mysite')
    

    【讨论】:

      【解决方案2】:

      试试这个,

      将你的项目路径添加到 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()
      

      【讨论】:

        猜你喜欢
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-03
        相关资源
        最近更新 更多