後端開發

Django 使用 MySQL 中文報錯

July 13, 2019
django, mysql, 後端開發

Django 使用 MySQL 中文報錯 # 默認的 SQLite 一般不會出現這個錯誤,不過一旦切換到了 MySQL 上之後,事情就發生了,表現爲存入數據的時候顯示: Incorrect string value: '\x01\x9D\x8C\x86' for column 'column_name' at row 1 很顯然 MySQL 自帶的編碼比較雞掰,使用了 latin1,但是我們要 utfmb4! 所以加入以下內容到 /etc/my.cnf 的最後並重啓 MySQL 服務器即可: \[client\] default-character-set = utf8mb4 \[mysql\] default-character-set = utf8mb4 \[mysqld\] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4\_unicode\_ci 確認一波是否真的修改好了: MariaDB \[(none)\]> show variables like 'character%'; +--------------------------+------------------------------+ | Variable\_name | Value | +--------------------------+------------------------------+ | character\_set\_client | utf8mb4 | | character\_set\_connection | utf8mb4 | | character\_set\_database | utf8mb4 | | character\_set\_filesystem | binary | | character\_set\_results | utf8mb4 | | character\_set\_server | utf8mb4 | | character\_set\_system | utf8 | | character\_sets\_dir | /usr/share/mariadb/charsets/ | +--------------------------+------------------------------+ 8 rows in set (0. ...

Nginx + Gunicorn 部署 Django 項目

May 7, 2019
後端開發

Nginx + Gunicorn 部署 Django 項目 # 只是簡單地記錄了一下一個非常 low 的部署方法,沒有任何的 CI/CD,這部分內容日後更新: Clone 項目 & 安裝環境 # 在 GitHub 上設置好 Deploy Key 之後即可在服務器上 Clone 下自己的倉庫,並且在項目內創建 Virtualenv: python -m venv env 進入了 env 之後,就是安裝本地需要的庫啦: pip3 install -r requirements.txt 由於使用了消息隊列 Celery,還需要安裝 redis 等,也就是一些 apt 的事情。 一切搞定之後就使用 Gunicorn 啓動(臨時解決方案是放在 screen 中跑,長期解決方案是 systemd),在項目目錄下: gunicorn <project\_name>.wsgi 當然,一個稍微好一點的方式是把 Gunicorn 放在 systemd 中運行,可以通過在 /etc/systemd/system/ 下創建一個 gunicorn.service ,文件內容如下: \[Unit\] Description = Django Gunicorn After = network.target \[Service\] User = ubuntu Group = ubuntu WorkingDirectory = /var/www/project\_name ExecStart = /var/www/project\_name/env/bin/gunicorn --access-logfile - --workers 3 project\_name. ...

UUID 作为数据库主键的 Insert 性能测试记录

March 9, 2019
Laravel, 後端開發

UUID 作为数据库主键的 Insert 性能测试记录 # 在之前一篇 《Laravel使用UUID作为用户表主键并使用自定义用户表字段》发布之后和一个朋友的朋友聊了聊,讲到了一个我没有考虑到的UUID作为主键的问题——Insert性能问题。 朋友的朋友看法如下(有删改): 如果非要用 UUID 的话,完全可以用一个列来单独存放 UUID 的,没有必要把 UUID 设置为主键。自增主键的作用是 insert 的时候是顺序插入到磁盘里的,这样 innodb 直接插入就好了,因为索引插入要进行排序等一系列操作的,涉及到 innodb 索引的具体知识了,所以为了性能考虑,基本都是自增主键,保证顺序 而不是随机 Naïve Insert Time Test # 从一个小的测试开始: 硬件环境: Core i7-8560U 16GiB LPDDR3 SAMSUNG PM981 软件环境: Laravel 5.6 MySQL 5.6 有兩個數據表,一個是使用 UUID 作爲主鍵的 users 表,一個是使用自增 id 作爲主鍵的 tickets 表,串行同步的方式插入 1000 條數據,相關 seed 函數和運行時間如下: User Table with UUID as PK # for ($i=0; $i < 1000; $i++) { DB::table('users')->insert(\[ 'user\_uuid' => (string) Uuid::generate(4), 'user\_name' => str\_random(10), 'user\_password' => bcrypt('secret'), \]); } 用時 62. ...

Build a naïve Blog with Laravel

March 9, 2019
Laravel, 後端開發

Build a naïve Blog with Laravel # 项目 # 基于springboot的个人博客系统 知识点 # *前端layui *springboot通用开发流程 springmvc hibernate-jpa web-service-dal mustache模板引擎 *Springboot Interceptor开发 *富文本编辑器 simeditor *博客热词词云 https://github.com/kennycason/kumo *图片上传组件 及解决方案 前端layui.upload https://www.layui.com/doc/modules/upload.html spring文件上传支持 ng代理/tomcat vdir 图像处理 *EXIF 读取及记录 https://github.com/drewnoakes/metadata-extractor 百度图像识别API 获取信息及记录 http://ai.baidu.com/docs#/ImageClassify-API/141c7bfa *图像timeline展示 https://www.layui.com/doc/element/timeline.html 部署相关 spring-boot的打包 spring.profiles.active linux基本命令 部署依赖(JDK、MySQL、ng) 实训计划 # 时间 知识点 进度 day0 需求宣讲、分组、数据库设计 确认项目需求、完成数据库设计 day1 springboot通用开发流程 确认项目UI、完成登录与注册开发 day2 spring interceptor开发 完成登录的interceptor开发 day3-4 layui+simeditor 完成博客撰写页\完成首页及详情页 day5-6 ...