对于我的生活,我不能找到一种使用Django 1.8,Python 2.7.3和virtualenv正确配置(Linode Debian 6)服务器的简单方法。这是我采取的步骤:
mkvirtualenv --python=/usr/bin/python2.7 curator
这会在/srv/ve/.virtualenvs/curator下为我创建一个VirtualEnv
现在我跑:
pip install django
Django 1.8已成功安装。然后,我切换到/ srv / www / curator并运行:
django-admin startproject cmscore
然后我按照Django Apache mod_wsgi说明操作,最后在我的sites-available目录下找到一个Apache conf文件,如下所示:
<VirtualHost *:80>
ServerName cms.example.com
ServerAlias cms.example.com cms.example2.com
ServerAdmin errors@example.com
DocumentRoot /srv/www/curator/public_html
WSGIDaemonProcess cms.example.com python-path=/srv/ve/.virtualenvs/curator/bin/python:/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages
WSGIProcessGroup cms.example.com
WSGIScriptAlias / /srv/www/curator/cmscore/cmscore/wsgi.py
<Directory /srv/www/curator/cmscore/cmscore>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
Alias /robots.txt /srv/www/curator/public_html/robots.txt
Alias /favicon.ico /srv/www/curator/public_html/favicon.ico
Alias /css /srv/www/curator/public_html/css
Alias /js /srv/www/curator/public_html/js
Alias /img /srv/www/curator/public_html/img
Alias /static/admin /srv/www/curator/public_html/admin
Alias /static /srv/www/curator/public_html/static
Alias /media /srv/www/curator/public_html/media
ErrorLog /srv/www/curator/logs/error.log
CustomLog /srv/www/curator/logs/access.log combined
</VirtualHost>
Django文档提到WSGIPythonPath
指令,但是当我使用它时,我收到WSGIPythonPath cannot occur within <VirtualHost> section
的错误。
通过这种配置,我得到了一个500错误(很明显,我还没有添加很多设置)但不是我期望的设置。我得到了这个(IP被我掏空):
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21802): Target WSGI script '/srv/www/curator/cmscore/cmscore/wsgi.py' cannot be loaded as Python module.
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] mod_wsgi (pid=21802): Exception occurred processing WSGI script '/srv/www/curator/cmscore/cmscore/wsgi.py'.
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] Traceback (most recent call last):
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] File "/srv/www/curator/cmscore/cmscore/wsgi.py", line 15, in <module>
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] from django.core.wsgi import get_wsgi_application
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] File "/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages/django/__init__.py", line 1, in <module>
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] from django.utils.version import get_version
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] File "/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages/django/utils/version.py", line 7, in <module>
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] from django.utils.lru_cache import lru_cache
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] File "/srv/ve/.virtualenvs/curator/lib/python2.7/site-packages/django/utils/lru_cache.py", line 28
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] fasttypes = {int, str, frozenset, type(None)},
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] ^
[Thu May 21 14:55:16 2015] [error] [client xxx.xxx.xxx.xxx] SyntaxError: invalid syntax
因此,这似乎是一个错误,当Django 1.8被早期版本的Python使用而不是2.7时。为了调试,我把它扔到我的wsgi.py文件的顶部:
import sys
activate_this = '/srv/ve/.virtualenvs/curator/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
sys.stderr.write(sys.version)
在我的Apache错误日志中,我看到:
2.6.6 (r266:84292, Dec 27 2010, 00:18:12)
我已经尝试过我能想到的每一个技巧(在完全相同的服务器上使用现有的Django 1.6和Python 2.7的技巧!),包括指向我在manage.py文件中正确的Python安装的shebangs ,但我找不到任何方法让这个工作。
我知道我在这里遗漏了一些非常明显的东西,但我对此视而不见,有人可以帮忙吗?