记一次痛苦的Django报错调试经历:
开发的程序在我的本地mac上,ubuntu上,以及树莓派上都成功实现了迁移和运行,但是当准备将运行好好地程序迁移到阿里云的服务器上的mysql数据库上时,出现了非常多的幺蛾子的问题。
具体如下:
初始化连接,执行python manage.py makemigrations; python manage.py migrate 生成部分表格(不全),报错。报错信息如下:
Specified key was too long; max key length is 767 bytes
由于所有的报错信息都是django的内部信息,无法判断具体错误在哪一段代码上。在网上找了各种资料,mysql版本等多种问题均未不是我想要的解决方案,因为本身确认没问题。
又遇上了Django从1.11.7升级到2.0的情况,看谁都像坏人。只能耐心地将django版本库升级到最新版后,将系统跑起来。在树莓派上测试还是ok,阿里云还是死。。。
后面又是逐步调整,把可能的所有的对象都搞了一遍,没有定位到错误。最后选择新建一个新的django项目,将models中的表一张张移过来,马上发现varchar(256)改成255后就可以成功运行了。终于找到了问题所在。后面就是调试定位具体的原因。
下面的代码是models.py中的两个varchar(256)的表。
from django.db import models # Create your models here. class Company(models.Model):
'''公司表'''
company_name=models.CharField(max_length=256,verbose_name='公司名称')
industry=models.CharField(max_length=32,verbose_name='所属行业',blank=True,null=True)
department=models.CharField(max_length=32,verbose_name='所属部门',blank=True,null=True) def __str__(self):
return self.company_name class Meta:
verbose_name='公司表'
verbose_name_plural='公司表' class Tags(models.Model):
'''标签表'''
tag_name=models.CharField(max_length=256,verbose_name='标签名称')
shadow_mark_id=models.IntegerField(verbose_name='影子标签',blank=True,null=True)
node_ancestor=models.ForeignKey('self',verbose_name='父节点',blank=True,null=True,on_delete=True) def __str__(self):
return self.tag_name class Meta:
unique_together=('tag_name','node_ancestor')
verbose_name='标签表'
verbose_name_plural='标签表'
逐步调整,最终发现,Company表中的varchar(256)也不会出错。最后的原因在于在Tags中,tag_name这个字段做了一个联合唯一, 阿里云对mysql索引做了限制,索引的长度不能超过255。
这就是一个字引发的血案。
记一次痛苦的Django报错调试经历:的更多相关文章
- Django报错:OSError: raw write() returned invalid length 4 (should have been between 0 and 2)
在使用Django时Django报错:Django报错:OSError: raw write() returned invalid length 4 (should have been between ...
- Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and you have APPEND_SLASH set.
Django报错:提交表单报错---RuntimeError: You called this URL via POST, but the URL doesn’t end in a slash and ...
- django 报错Reverse for 'detail' with keyword arguments '{'pk': '2'}' not found. 1 pattern(s) tried: ['$post/(?P<pk>[0-9]+)/$']
Django报错:Reverse for 'detail' with keyword arguments '{'pk': '2'}' not found. 1 pattern(s) tried: [' ...
- Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name.
Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name. 我 ...
- 记一次Django报错Reverse for 'indextwo' with no arguments not found. 1 pattern(s) tried: ['$index/$']
启动python manage.py runserver 打开127.0.0.1:8000,报错信息如下: Reverse for 'indextwo' with no arguments not f ...
- ubuntu pip 安装django报错解决
系统版本 ubuntu Kylin 16.04 LTS 安装pip3 安装 Django 总是提示time out,无法安装. 逛了好多论坛终于遭到了解决办法,分享保存: sudo pi ...
- 关于Django报错django.core.exceptions.ImproperlyConfigured: Requested setting DEBUG, but settings are not configure
报错代码:django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but se ...
- django报错解决:view must be a callable or a list/tuple in the case of include().
django版本:1.11.15 django应用,修改urls.py后,访问报错:TypeError at /view must be a callable or a list/tuple in t ...
- django报错解决:Invalid HTTP_HOST header: 'xxx.com'. You may need to add u'xxx.com' to ALLOWED_HOSTS.
django版本:1.11.15 使用uwsgi+nginx运行django程序,出现报错,报错为:Invalid HTTP_HOST header: 'xxx.com:82'. You may ne ...
随机推荐
- 使用gulp自动构建项目
网址:https://segmentfault.com/a/1190000011514257
- php 直接跳出嵌套循环
break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行. break 可以接受一个可选的数字参数来决定跳出几重循环. <?php $arr = ...
- Ceph学习笔记(3)- Monitor
Ceph学习笔记(3)- Monitor 前言: Ceph将cluster map与placement rule合并为一张表称为crush map,作为集群表的一部分.由Monitor对集群表的副 ...
- Unity - 旋转方法
前言 本文梳理了Unity中常用的旋转方法,涉及两大类:Transform.Quaternion. Transform 类 Rotate() 此方法重载多,易理解,在连续动态旋转中较为常用. /* o ...
- docker开机自动启动
方法一: chkconfig docker on 方法二: 1.1是用systemctl: systemctl enable docker 1.2将Docker的docker.service服务移动到 ...
- 35 编码 ASCII Unicode UTF-8 ,字符串的编码、io流的编码
* 编码表: * 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难.为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制的统一的信息交换代码,这就是ASCII码表 *ASCII ...
- 四、华为VRP平台介绍和常用配置
一.华为VRP平台 华为现用的平台是VRP(Versatile Routing Platform)是华为公司数据通信产品的通用操作系统平台. 包含华为产品中的路由.交换.安全.无线等等 二.华为设备管 ...
- 014-预处理指令-C语言笔记
014-预处理指令-C语言笔记 学习目标 1.[掌握]枚举 2.[掌握]typedef关键字 3.[理解]预处理指令 4.[掌握]#define宏定义 5.[掌握]条件编译 6.[掌握]static与 ...
- Java程序员必备:序列化全方位解析
前言 相信大家日常开发中,经常看到Java对象"implements Serializable".那么,它到底有什么用呢?本文从以下几个角度来解析序列这一块知识点~ 什么是Java ...
- 【Java】 语言基础习题汇总 [2] 面向对象
30 面向对象的三条主线和面向对象的编程思想? 类与类的成员 : 属性.方法.构造器.代码块.内部类. 面向对象的三大特征:封装.继承.多态[如果还有一个,那就是抽象] 关键字:this.super. ...