本文用于记录从SQLite数据库迁移到MySQL数据库,以及使用Nginx + Gunicore对Django应用进行部署的过程
数据库迁移
SQLite => MySQL
在学习Django的时候,使用的是默认的SQLite数据库,原因是该数据库十分轻便,效率较高,易于进行测试与学习,可移植性好。但是该数据库存在一定的局限性:
- 同一时间只允许一个写操作,造成吞吐量有限;
- 全部数据都写入一个后缀为
.sqlite3
文件中
在生产环境中,更受欢迎的是MySQL数据库,它支持
- 事务操作
- 高级的安全特性
- 支持行锁,因此可以提供一定的并发性能
- 分布式操作
修改Django配置
根据这里给出的步骤进行操作
首先将目前SQLite中的数据进行备份
1 | $ python manage.py dumpdata --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 4 > datadump.json |
之后根据官网的教程安装MySQL驱动
1 | $ brew install mysql-connector-c |
修改Web App中的setting.py
文件中的对应项,此处需要注意的是
- MySQL的默认端口为3306
- 此时MySQL中必须已经有对应的数据库
- MySQL默认的编码方式是Latin1,在创建的时候必须声明
create database name character set utf8
1 | DATABASES = { |
配置完成之后进行数据迁移
1 | $ python manage.py makemigrations |
此时出现了错误
1 | $ installing mysqlclient error: mysqlclient 1.3.13 or newer is required; you have 0.9.3 |
在StackOverflow中查得该问题,发现大家是直接修改源文件… 把这个exception省略掉… 于是根据终端中报错的文件位置,在Finder中使用shift + command + g
直接到达文件位置进行修改
修改过上述问题之后,数据迁移成功,进入MySQL中可以看到目前的已有数据
应用部署
Vim
- 在普通模式下输入
/
可以进入查找模式,默认为大小写敏感的查找,在输入过希望查找的字段之后回车即可进行查找,接着键入n
查看下一个匹配项,键入N
查看上一个匹配项 - 多行删除
beginLineNo, endLineNo d
递归拷贝文件
如果需要拷贝的目录下存在子目录,那么需要使用cp -r copyFromFolder copyToFolder;
以递归地复制子目录中的所有内容
虚拟环境
本次部署让我深刻意识到以前的自己在本机环境下仅使用一个Python环境的坏处…
在需要部署到服务器上的时候,因为需要将Web应用的第三方依赖重新下载,导致目前为止机子上的各种第三方包都在requirement.txt
上面了
详解Django中的静态文件目录 https://juejin.im/entry/5ac439af5188255cb07d52f0