前言
新公司的第一个项目,服务器端打算用python作为restful api。所以需要在Centos上搭建nginx+fastcgi+python的开发环境,但后面网上很多言论都说uwsgi比fastcgi在很多方面存在优势,推荐用uwsgi而不是fastcgi,详见:http://sunxiunan.com/?p=1778。因此,改为搭建nginx+uwsgi+python这样的技术组合。
正题
步入正题,开始搭建环境。http://www.cnblogs.com/xiongpq/p/3381069.html,这篇博文对于整个搭建的过程介绍得最详细,但实际搭建过程中,却遇到一个难题始终无法解决。当到第八步测试时,浏览器显示“Internal server error”,可以确定的是uwsgi和django的连接有问题,估计是配置uwsgi有问题。于是找了另一篇技术贴来解决我的问题,见http://django-china.cn/topic/101/。这篇文章对于搭建的过程进行了拆分,帮助理解搭建的过程。但当我配置完成django后,连接django和uwsgi时,出现一个问题,后台显示:
django.core.exceptions.AppRegistryNotReady: Models aren’t loaded yet。之后,在网上找到了原因,django1.4和django1.5版本,wsgi.py为:
import os
import sys
from django.core.handlers.wsgi import WSGIHandler
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = WSGIHandler()
但当django1.7时,应改为
import os
import sys
from django.core.wsgi import get_wsgi_application
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
application = get_wsgi_application()
哎,这实在是个坑。好了,问题解决后,django和uwsgi就成功的连接起来了,所有请求都是经过uwsgi传递给django程序处理。继续按照该文章的步骤来,又遇到问题了。所有配置完毕后,启动uwsgi服务的时候,执行uwsgi -x djangochina_socket.xml 命令时提示:uwsgi:invalid option --‘x’,继续度娘,找到答案:这个问题是因为编译uwsgi的时候少了libxml2库导致的,应该先安装库在编译,否则会少了xml的支持。这里需要注意的是,必须先安装libxm,再安装uwsgi,否则无效。由于我已经安装了uwsgi,所以需要先卸载uwsgi,用命令pip uninstall uwsgi,这时就体现出第一篇博文的优点了,用pip安装卸载程序非常方便。接着,yum install libxml*安装libxml2库。
OK,终于所有问题都解决,浏览器访问:http://127.0.0.1/admin,就能出现django后台管理登录界面,大功告成!