Nginx+Django+uwsgi项目迁移要注意的坑

今天迁移一个Django项目,部署和原项目一样采用的是Nginx+Django+uwsgi的模式。由于是一台新的机器环境有点差异,部署过程中有些坑踩的有点多。具体如下:
1、整个项目是完全拷贝过来的要先删除原先项目配置文件夹下的所有.pyc文件,再启动uswgi。

[root@xxxx diewu]# ls
__init__.py   nginx_settings.py   nginx_wsgi.py   settings.py   urls.py   uwsgi.xml  views.pyc  wsgi.pyc
__init__.pyc  nginx_settings.pyc  nginx_wsgi.pyc  settings.pyc  urls.pyc  views.py   wsgi.py
[root@xxxx diewu]# rm -f *.pyc
[root@xxxx diewu]# ls
__init__.py  nginx_settings.py  nginx_wsgi.py  settings.py  urls.py  uwsgi.xml  views.py  wsgi.py
[root@xxxx diewu]#

2、启动uwsgi的时候要在项目配置文件夹下启动,不然会报错”ImportError: No module named nginx_wsgi”

[root@xxxx diewu]# /usr/bin/uwsgi -x /opt/www/diewu/diewu/uwsgi.xml --uid 501
[uWSGI] parsing config file /opt/www/diewu/diewu/uwsgi.xml
[root@xxxx diewu]# pwd
/opt/www/diewu/diewu

3、mysql的sock文件和文件夹需要读取权限,不然可能因为权限不够造成MySQL-python模块连mysql失败”Can’t connect to local MySQL server through socket ‘/opt/mysqldata/mysql.sock'”

[root@xxxx ~]# chown 755 /opt/mysqldata/
[root@xxxx ~]# ls /opt/mysqldata/ -ld
drwxr-xr-x 6 mysql mysql 4096 May  6 14:03 /opt/mysqldata/
[root@xxxx diewu]# ll /opt/mysqldata/mysql.sock 
srwxrwxrwx 1 mysql mysql 0 May  6 14:03 /opt/mysqldata/mysql.sock
[root@xxxx diewu]#

4、编译安装uwsgi,启动时报错”uwsgi:invalid option — x”

[root@xxxx diewu]# /usr/bin/uwsgi -x /opt/www/diewu/diewu/uwsgi.xml --uid 501
uwsgi:invalid option -- x
getopt_long() error
[root@xxxx diewu]#

安装libxml2*重新编译安装uwsgi即可

[root@xxxx uwsgi-1.9.20]# yum install libxml*
[root@xxxx uwsgi-1.9.20]# python setup.py build
[root@xxxx uwsgi-1.9.20]# python setup.py install

这些坑踩一次就好了,希望遇到这些问题的攻城狮不要再踩了。
文章出处:http://www.xiaomastack.com/2015/05/06/django-uwsgi-trap/

2 Comments

 Add your comment
  1. import nginx_wsgi报错,是因为引用的时候使用的相对路径吧?最好把那个nginx_wsgi放到django工程根目录下的一个目录里,这样启动的时候会在PYTHONPATH里,就没有这个问题了。

  2. 嗯,我检查了下nginx_wsgi.py文件是放在工程根目录下的工程配置目录里/opt/www/diewu/diewu/,工程根目录是/opt/www/diewu/,目前还没有找到更好的解决方法。

发表评论:

你的电子邮件地址将不会被公开.

84 ÷ 28 =