Django - python3.4 virtualenv - apache

时间:2015-05-11 19:26:49

标签: python django apache mod-wsgi

我有一个Django应用程序,我一直在使用manage.py runserver进行调试。

我现在正试图用apache / mod_wsgi来提供它。

当我尝试打开主页时,我收到500错误。日志文件在functools.py中显示语法错误。

mod_wsgi (pid=28016): Target WSGI script '/home/username/projects/django/testing/testing/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=28016): Exception occurred processing WSGI script '/home/username/projects/django/testing/testing/wsgi.py'.
Traceback (most recent call last):
File "/home/username/projects/django/testing/testing/wsgi.py", line 12, in <module>
  from django.core.wsgi import get_wsgi_application
File "/home/username/.virtualenvs/testing/lib/python3.4/site-packages/django/__init__.py", line 1, in <module>
  from django.utils.version import get_version
File "/home/username/.virtualenvs/testing/lib/python3.4/site-packages/django/utils/version.py", line 7, in <module>
  from django.utils.lru_cache import lru_cache
File "/home/username/.virtualenvs/testing/lib/python3.4/site-packages/django/utils/lru_cache.py", line 2, in <module>
  from functools import lru_cache
File "/home/username/.virtualenvs/testing/lib/python3.4/functools.py", line 291
  cls_or_self, *rest = args
               ^
SyntaxError: invalid syntax

据我所知,这是有效的python3.4语法。所以我不完全确定我是否正确配置WSGI以使用我的virtualenv。

#testing.conf
<VirtualHost *:80>
    WSGIDaemonProcess django.testing.username.vni user=username group=username python-path=/home/username/.virtualenvs/testing/lib/python3.4/site-packages:/home/username/.virtualenvs/testing/lib/python3.4:/home/username/.virtualenvs/testing
    WSGIProcessGroup django.testing.username.vni

    WSGIScriptAlias / /home/username/projects/django/testing/testing/wsgi.py

    ServerAdmin username@webserver.com
    ServerName django.testing
    ServerAlias www.django.testing

    Alias /static/ /home/username/projects/django/testing/static/

    <Directory />
        AllowOverride None
        Options -Indexes
    </Directory>

    <Directory /home/username/projects/django/testing/testing>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    ErrorLog /var/log/apache2/django.testing.log
    LogLevel warn

</VirtualHost>

我想我上面可能有一个有问题的python路径。

#wsgi.py
import os

from django.core.wsgi import get_wsgi_application

import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/..")
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testing.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

application = get_wsgi_application()

我不确定我是否正确处理了sys.path.append()或者DJANGO_SETTINGS_MODULE。他们就是为了解决我遇到的其他一些错误。

1 个答案:

答案 0 :(得分:3)

正如Daniel Roseman所说,问题是我的python3.4的mod_wsgi版本错误。我删除了libapache2-mod-wsgi并安装了libapache2-mod-wsgi-py3。