尝试使用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的存在。没办法啊。

广告
将在 10 秒后关闭
bannerAds