本人目前是一家生物识别解决方案公司的技术支持,主要负责linux终端以及web软件售后维护;因工作原因,近期对于web软件开发关注较多,此前一直断断续续在学习相关的知识,却收效甚微。故计划写技术博客,希望能够借此丰富自己的知识体系。
以下是我在搭建web服务器,配置Nginx+uwsgi+Django时遇到的一些问题,配置参考链接:Setting up Django and your web server with uWSGI and nginx
浏览器报错 502 Bad Gateway,多次测试发现,这是Nginx跟uWSGI没有连接成功导致;运行uwsgi --ini mysite_uwsgi.ini,根据报错适当修改配置内容,正常运行后该报错消失
Nginx跟uWSGI成功连接,但浏览器报错Internal Server Error,运行uwsgi --ini mysite_uwsgi.ini,日志提示:
SyntaxError: invalid syntax
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
由于网上查到类似的情况都是uwsgi.ini配置错误导致,因此起初的排查方向一直是这个方面;经过大半天的排查依旧一无所获;就在计划放弃(可能并不会立刻放弃,还会再纠结一阵子;毕竟一步一步配置几乎花了我半个月的业余时间,小心翼翼搭起来的花架子删掉重来还是很需要一定的勇气沮丧程度的),推到重来时,不死心又手动测试了下Django server,
python manage.py runserver 0.0.0.0:8888
发现以下报错;
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/root/myvirtualenv/mysite/mysite/settings.py", line 29
ALLOWED_HOSTS = [*]
^
SyntaxError: invalid syntax
而之前的运行uwsgi --ini mysite_uwsgi.ini,日志里也有类似的内容:
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "./mysite/settings.py", line 29
ALLOWED_HOSTS = [*]
^
SyntaxError: invalid syntax
unable to load app 0 (mountpoint='') (callable not found or import error)
由于之前未配置 ALLOWED_HOSTS 导致浏览器报错
DisallowedHost at /
Invalid HTTP_HOST header: '192.168.1.11:8080'. You may need to add u'192.168.1.11' to ALLOWED_HOSTS.
而配置 ALLOWED_HOSTS = [*]后,浏览器不再报上述错误,而且报Internal Server Error,因此一直以为这次配置是准确的;偶然发现,[*] 好像少了点内容;应该是
ALLOWED_HOSTS = ['*']
修改 mysite/setting.py 里边的 ALLOWED_HOSTS 之后,浏览器访问Django APP 正常,问题解决。
代码中,单引号真是十分重要又十分容易被忽略的内容,谨记
写于5月2日凌晨,待更新
配置mysql连接Django,安装mysqlclient时,遇到以下报错:
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.8/MySQLdb/_mysql.o -lmysqlclient -lpthread -lm -lrt -lssl -lcrypto -ldl -o build/lib.linux-x86_64-3.8/MySQLdb/_mysql.cpython-38-x86_64-linux-gnu.so
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
网上搜索结论是库文件异常;因为不太了解链接之类的,索性直接:
sudo apt-get install libssl-dev
但是安装libcrypto-dev时提示:
Unable to locate package libcrypto-dev
好在后来又尝试了 pip install mysqlclient,成功了;目前不清楚是什么原因,以后了解之后再来补充;
写于5月4日凌晨,待更新