尝试使用Debian + Python 3.4 + django1.7……但是
回头一看,结果实在太可笑了,但我还是记录下来了,毕竟做过了。
想做的事情
-
- Ubuntu(14.04 LTS)うらやましいなぁ。DebianでもPython 3.4試せないかなぁ
-
- ついでにdjango1.7も試してみたいなぁ
-
- Debianシステム標準の2系(2.7)は残しておきたいなぁ
-
- Debianシステム標準の3系(3.2)も残しておきたいなぁ
-
- 特定のdjangoプロジェクトだけPython 3.4でdjango1.7(b3)を使って「わはー」な世界を目指そう
- Apache2上でバラバラのバージョンで動いたら楽しい!
或者是希望在打开Emacs和终端的开发环境中,一切都能暂时正常运行的要求。
总结起来,尽管能够运行./manage.py runserver,但mod_wsgi无法满足最后的要求。
以下为参考链接。
-
- https://github.com/tagomoris/xbuild
-
- https://github.com/tagomoris/xbuild/blob/master/python-install
-
- https://www.djangoproject.com/download/
- https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/
任务
-
- python3.4.0 をとにかく用意する
-
- それをベースにpyvenvを使ってdjango1.7専用世界を作る
-
- プロジェクトを作る
Apache2のmod_wsgi経由で走らせてわはー
xbuild/python-install 3.4.0 /opt/python3.4.0
/opt/python3.4.0/bin/pyvenv /opt/django1.7
source /opt/django1.7/bin/activate
(django1.7) > which pip
/opt/django1.7/bin/pip
(django1.7) > pip install https://www.djangoproject.com/download/1.7b3/tarball/
..
(django1.7) > pip list
Django (1.7b3)
pip (1.5.4)
setuptools (2.1)
(django1.7) > cd /opt
(django1.7) > django-admin.py startproject mysite
(django1.7) > cd mysite
(django1.7) > ls
manage.py mysite
(django1.7) > ./manage.py syncdb
..
(django1.7) > ./manage.py runserver
(Visit http://localhost:8000/)
只要能到这一步,暂且算是胜利了吧。接下来只需处理apache2的设置罢了。
WSGIDaemonProcess mysite user=www-data group=www-data processes=2 threads=2 \
maximum-requests=100 umask=0007 \
python-path=/opt/mysite:/opt/django1.7/lib/python3.4/site-packages
WSGIScriptAlias /mysite /opt/mysite/mysite/wsgi.py
<Directory /opt/mysite/mysite>
<Files wsgi.py>
SetEnv PROCESS_GROUP mysite
Order deny,allow
Allow from all
</Files>
</Directory>
暂且将SQLite数据库的写入权限调整为www-data用户可写入状态。
(django1.7) > chmod 777 db.sqlite3
(django1.7) > chmod 777 .
(django1.7) > sudo service apache2 restart
(Visit http://localhost/mysite/admin)
为了确保版本确实已经更新至3.4,只需稍微修改urls.py和views.py。
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'mysite.views.home', name='home'),
)
from django.http import HttpResponse
import sys
def home(request):
return HttpResponse(str(sys.version_info), content_type="text/plain")
结果 – jié guǒ
当已激活venv环境时,通过执行./manage.py runserver命令运行
sys.version_info(major=3, minor=4, micro=0, releaselevel='final', serial=0)
当将apache2与mod_wsgi结合运行时
sys.version_info(major=3, minor=2, micro=3, releaselevel='final', serial=0)
哎呀……(如果没有安装libapache2-mod-wsgi-py3,这里会变成指示2.7版本的东西,进一步令人震惊的伤害)
Apache2 的日志无所不言。
[Thu May 01 17:01:31 2014] [notice] Apache/2.2.22 (Debian) mod_auth_tkt/2.1.0 PHP/5.4.4-14+deb7u9 mod_ssl/2.2.22 OpenSSL/1.0.1e mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
[Thu May 01 17:04:01 2014] [notice] caught SIGTERM, shutting down
[Thu May 01 17:04:02 2014] [warn] mod_wsgi: Compiled for Python/3.2.2rc1.
[Thu May 01 17:04:02 2014] [warn] mod_wsgi: Runtime using Python/3.2.3.
那里啊 orz
多分不太可能同时存在多个mod_wsgi,所以需要单独安装Apache。
如果要这样做的话,可能会选择使用Docker或KVM。
不过,这样分割操作系统的话,配置文件也会被分散到各个方向,离最初的需求还有相当大的距离。
追加内容
我从tornado + apache的反向代理的想法中受到启发。这让我震惊地意识到我之前对tornado一无所知。
-
- http://www.tornadoweb.org/en/stable/
- http://stackoverflow.com/questions/22062307/tornado-vs-wsgiwith-gunicorn
哎呀,我今天刚知道xbuild和pyenv的存在。没办法啊。