Migration and Deployment of Django Web App

本文用于记录从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
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_project_name',
'USER': 'root',
'PASSWORD': 'your_root_password',
'HOST': 'your_host_address',
'PORT': 'your_port',
}
}

配置完成之后进行数据迁移

1
2
$ python manage.py makemigrations
$ python manage.py migrate --run-syncdb

此时出现了错误

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

  1. 在普通模式下输入/可以进入查找模式,默认为大小写敏感的查找,在输入过希望查找的字段之后回车即可进行查找,接着键入n查看下一个匹配项,键入N查看上一个匹配项
  2. 多行删除 beginLineNo, endLineNo d

递归拷贝文件

如果需要拷贝的目录下存在子目录,那么需要使用cp -r copyFromFolder copyToFolder;以递归地复制子目录中的所有内容

虚拟环境

本次部署让我深刻意识到以前的自己在本机环境下仅使用一个Python环境的坏处…

在需要部署到服务器上的时候,因为需要将Web应用的第三方依赖重新下载,导致目前为止机子上的各种第三方包都在requirement.txt上面了

详解Django中的静态文件目录 https://juejin.im/entry/5ac439af5188255cb07d52f0

0%