nginx版本:1.20.1
uwsgi版本:2.0.19.1
django版本:3.2.5
踩坑点:
-
Django项目数据库使用sqlite3,django版本为3.2.5,linux环境自带的sqlite版本太低,启动时时提示
django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher
-
项目需要到部署公司预生产服务器,没有开放端口白名单,只能使用开发部署好的nginx做代理,出现静态文件和请求接口路径出错的问题
-
Python3.7及以上版本不支持1.0.2版本以下的openssl(服务器自带版本为1.0.1),导致请求https接口报
Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")
注:建议你先倒着看最后一个问题,不然你得重头再来,有坑。
问题一 sqlite3版本过低:
首次把写好的django项目丢到本地服务器测试运行,使用 python3 manage.py runserver 0.0.0.0:8088
命令时启动报错,django.db.utils.NotSupportedError: deterministic=True requires SQLite 3.8.3 or higher
,自带的sqlite3版本过低,django3不支持使用,使用 sqlite3 -version
查看sqlite3版本为3.6.20,天真的我以为升级下版本就好了,于是下载了3.27.2版本的sqlite3安装包,更新后重新配置,在python中也验证了版本没有问题:
再次运行时继续报错。
无果后只能通过安装 pysqlite3
和 pysqlite3-binary
库,再修改django配置解决,那就装吧。
pip3 install pysqlite3
pip3 install pysqlite3-binary
分别安装好两个库,接下来就是修改django中的导入配置:
# 根据自己python3安装的位置填写路径
vim /usr/local/python3/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py
# from sqlite3 import dbapi2 as Database (在文件内找到并注释掉这段)
from pysqlite3 import dbapi2 as Database # 修改为pysqlite3
至此,sqlite3版本过低 的问题解决。
问题二 nginx做代理转发:
在本地环境运行时没有任何问题,使用 python3 manage.py runserver 0.0.0.0:8088
命令启动后可以正常打开,在我上传到预生产环境、然后启动项目、打开浏览器访问准备大干一场时,发现前端页面请求不到静态资源了,前端页面写的非常简陋我就不放了,就是实现一个对接百度API识别发票接口,客户在前端上传包含发票图片的压缩包,上传完毕后可点击归档按钮,后台解压压缩包–>获取所有图片–>压缩后进行图片识别–>识别完成后根据返回的开票人姓名创建文件夹–>将该图片移动至新建文件夹内–>将图