django3上线部署踩的坑
好久没有用过django写项目了,最近公司开发个官网,一时兴起就拿来练练手,这不用不知道,一用吓一跳啊。
才多久,版本都到3.0了。
踩坑一:运行项目时失败报错,后来查找资料发现, 当你使用django2.2及以后版本的时候,连接数据库会报如下的一个错误:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.2.
这是django2.2及以后内部的一个版本限制在作怪
django2.2不支持pyMySQL,但2.2是LTS,想过试试mysqldb,但是MySQLDB又不支持python3。。。。
解决办法如下:
找到/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/db/backends/mysql/base.py路径下
将这两行注掉,如果是3版本的话这样就可以了,2.2的话
#if version < (1, 3, 13):
# raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
如果是3版本的话这样就可以了,2.2的话还会报错
site-packages\django\db\backends\mysql\operations.py”, line 146, in last_executed_query
query = query.decode(errors=‘replace’)
AttributeError: ‘str’ object has no attribute ‘decode’
解决办法:
打开此文件把146行的decode修改为encode
此外,还有一个比较麻烦的是,在创建表关系的时候,有一个参数要加上,不然会报错的
TypeError: __init__() missing 1 required positional argument: 'on_delete'
修改为:
user_id = models.OneToOneField("User", on_delete=models.CASCADE, to_field='id')
踩坑二:项目开发完了是不是要上线,这是我就想到了现在常用的网红搭配:Nginx + MySql + Gunicorn + Django3.0.4,想法是好的,可是天不随人愿啊,到底还是有问题,项目启动以后,发现静态文件访问不了:
看setting文件,主要的配置都在:
DEBUG = True TIME_ZONE = 'Asia/Shanghai'
# TIME_ZONE = 'UTC' STATIC_URL = '/static/' # html 静态文件夹 # REST_FRAMEWORK = {
# "DEFAULT_AUTHENTICATION_CLASSES": ["back.auth.TokenAuthentication", ]
# } APPEND_SLASH = True # 默认等于True,等于Flase时,不会为URL末尾自动添加/
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), # 静态文件存放位置
] STATIC_ROOT = os.path.join(os.path.dirname(__file__),'static')
经过和小伙伴一番讨论终于得知
Gunicorn+Django部署后,启动gunicorn时会关闭django的debug模式,这时无论是访问前台页面还是后台的admin管理页面,静态文件都会失效
启动命令
gunicorn -c gunicorn.conf xxxx.wsgi -preload gunicorn.conf import os
import multiprocessing
bind = '0.0.0.0:8002' #绑定ip和端口号
worker_class = 'gevent' #使用gevent模式,还可以使用sync 模式,默认的是sync模式
workers = multiprocessing.cpu_count() * 2 + 1 #进程数
threads = 2 #指定每个进程开启的线程
随后经过度娘的帮助终于找到了解决的办法:
解决办法一:
在urls文件里加上如下代码:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns urlpatterns = [
path('admin/', admin.site.urls),
path('', views.Index.as_view({'get': 'index'})),
path('api/v1/', include(('back.urls', 'back'), namespace='back')),
] urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
解决办法二:
就是把资源托管交给web服务器,在这里就是nginx
具体配置如下:
server {
listen 80;
server_name www.xxxxx.com;
location / {
proxy_pass http://localhost:0000;
}
location /static{
alias /home/xxxxx/xxxxxx/xxxxxxx/static;
}
}
到此圆满解决。长舒一口气!!!!!
django3上线部署踩的坑的更多相关文章
- IdentityServer 部署踩坑记
IdentityServer 部署踩坑记 Intro 周末终于部署了 IdentityServer 以及 IdentityServerAdmin 项目,踩了几个坑,在此记录分享一下. 部署架构 项目是 ...
- centos部署yapi爬坑记
前言 这几天终于完成了为期三个月的公司某个demo版的项目,在这期间和公司的后台因为API的事怼过无数次了,'我的接口没问题,是你请求的方式不对吧!'.'一定是你请求的参数不对'......诸如此类问 ...
- 从零开始学 Java - Spring 支持 CORS 请求踩的坑
谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...
- Walle - 瓦力上线部署系统搭建攻略
背景知识:Walle - 瓦力是一个支持svn.git.多用户.多项目.多环境同时部署的上线部署系统,http://www.oschina.net/news/68610/walle-0-9-2 实验系 ...
- webuploader插件,我踩得坑
我在目前的公司做的项目要么是原生写法去做项目,要么就是vue+webpack做项目,但是vue这部分只是用了模板template,vue其他的都没用. 有一个项目需要做上传图片的功能,老大扔给我一个插 ...
- 谈谈调用腾讯云【OCR-通用印刷体识别】Api踩的坑
一.写在前面 最近做项目需要用到识别图片中文字的功能,本来用的Tesseract这个写的,不过效果不是很理想. 随后上网搜了一下OCR接口,就准备使用腾讯云.百度的OCR接口试一下效果.不过这个腾讯云 ...
- Asp.Net Core中使用Swagger,你不得不踩的坑
很久不来写blog了,换了新工作后很累,很忙.每天常态化加班到21点,偶尔还会到凌晨,加班很累,但这段时间,也确实学到了不少知识,今天这篇文章和大家分享一下:Asp.Net Core中使用Swagge ...
- python绘图踩的坑
踩的坑 pyecharts安装地图包 pip install echarts-countries-pypkg 报错Unknown or unsupported command 'install' 这可 ...
- 使用CCNode作为容器容易踩的坑
Cocos2dx中CCNode经常作为一个父容器,里面装一些UI控件,最后组成一个复杂的自定义的UI控件,但是在使用别人的自定义控件和自己写自定义问题的时候会踩一些坑. 首先拿到一个自定义的UI控件一 ...
随机推荐
- ❤️用武侠小说的形式来阅读LinkedList的源码,绝了!
一.LinkedList 的剖白 大家好,我是 LinkedList,和 ArrayList 是同门师兄弟,但我俩练的内功却完全不同.师兄练的是动态数组,我练的是链表. 问大家一个问题,知道我为什么要 ...
- 百闻不如一试——公式图片转Latex代码
写博客时,数学公式的编辑比较占用时间,在上一篇中详细介绍了如何在Markdown中编辑数学符号与公式. https://www.cnblogs.com/bytesfly/p/markdown-form ...
- 揭秘盒马鲜生 Android 短视频秒播优化方案
短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留.因此,体验的优化就显得尤为重要.上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 Androi ...
- ThreadLocal原理简单刨析
ThreadLocal原理简单刨析 ThreadLocal实现了各个线程的数据隔离,要知道数据是如何隔离的,就要从源代码分析. ThreadLocal原理 需要提前说明的是:ThreadLocal只是 ...
- 不写注释的程序员-Models
Models 不写注释的程序员-Models # This is an auto-generated Django model module. # You'll have to do the foll ...
- Servlet体系结构
一.使用HttpServlet 其中,HttpServlet在重写的service()方法中对http请求的共7中提交方式进行了判断,所以只要我们只要重写对应的请求方式处理逻辑方法 doGet()和d ...
- MySQL实战45讲(06--10)-笔记
目录 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍? 全局锁 表级锁 小结 07 | 行锁功过:怎么减少行锁对性能的影响? 死锁和死锁检测 08 | 事务到底是隔离的还是不隔离的? &quo ...
- shell 脚本 根据PID过滤查看进程所有信息
#!/bin/bash read -p "输入要查询的PID: " P #筛选第二列等于输入的PID号 n=`ps aux | awk '$2~/^'$P'$/ {print $1 ...
- 使用Python来临时启动端口,用来做安全时候的扫描用
root用户:mkdir /home/aicccd /home/aicc/nohup python -m SimpleHTTPServer 8060 &netstat -antp|grep 8 ...
- PTA——c++类与对象
对于给定的一个字符串,统计其中数字字符出现的次数. 类和函数接口定义: 设计一个类Solution,其中包含一个成员函数count_digits,其功能是统计传入的string类型参数中数字字符的个数 ...