安装 poetry 并安装项目依赖
- 下载脚本 get-poetry.py
- 下载 poetry 最新版
- 运行
python get-poetry.py --file poetry-<version>-win32.tar.gz
- 项目下
poetry install --no-root
- 安装
python-is-python3
包 - 参照 Windows 安装,记得下载 Linux 对应版本
- 按照 pyenv 教程安装
pyenv install 3.8.5
(请自行替换为适宜版本)pyenv global 3.8.5
- 参照 Windows 安装,记得下载对应版本
如果你确定以后不会 contribute to open source projects which use poetry,并且 python3 -V
是 3.6+
pip3 install poetry==1.1.0b2
🎉
不推荐的原因是如果安装在 Python 3.7,以后要建立 2.7 的环境开发会更麻烦。
(应该要)重启 shell
poetry install --no-root
如果是生产环境:
poetry install --no-root --no-dev -E uwsgi
如果说装 uwsgi 的时候说少 C 编译器,就装个 gcc,没有
<Python.h>
,就装个python3-dev
怎么安装 MySQL 就不用赘述了吧
数据库名称随意,后续配置匹配即可
显然不能直接用 newuser@password
,密码太弱了
-- 这里需要设置编码,保存 emoji 等 Unicode 时需要
CREATE DATABASE PKU_PHY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
-- Version 1
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
-- The asterisks in this command refer to the database and table (respectively) that they can access
-- Version 2
use test_db
GRANT SELECT, INSERT, DELETE ON `test` TO test@'localhost' IDENTIFIED BY 'testy';
-- end if
exit
将 local.template.yaml
拷贝为 local.yaml
并设置为本地需要的参数。一般需要使用的参数都在其中。
主要修改 SQLALCHEMY_DATABASE_URI
和邮件部分。
以下两个值在生产环境中必须要设置
>>> import secrets
>>> secrets.token_urlsafe(16)
'Drmhze6EPcv0fN_81Bj-nA'
为方便复制粘贴,提供一行版本:
python -c 'import secrets;print(secrets.token_urlsafe(16))'
KEEP THIS REALLY SECRET
用来加密 session,学号等。
>>> from cryptography.fernet import Fernet
>>> Fernet.generate_key()
为方便复制粘贴,提供一行版本:
python -c 'from cryptography.fernet import Fernet;print(Fernet.generate_key().decode())'
# 单纯地跑测试
poetry run pytest # add -s to enable stdout
# 记录测试覆盖率
poetry run task test-cov
poetry run task cov-report
# 代码检查
poetry run task flake8 bookB116
仅生产环境需要配置。可参考 noc
脚本
克隆前端仓库,并安装提示操作。随便把输出文件夹 link 到哪
poetry run flask student build student_data1.csv data2.csv
如果是迁移,则使用 mysqldump
操作
0 10 * * * cd /path/to/bookB116-backend && poetry run flask booking send-summary
export FLASK_ENV=production
export UWSGI_NAME=b116 # pid, log, sock 的名字
export UWSGI_DEV=1
# 启动
poetry run uwsgi --ini uwsgi.ini
# 重启
poetry run uwsgi --reload "/tmp/$UWSGI_NAME.pid"
# 关闭
poetry run uwsgi --stop "/tmp/$UWSGI_NAME.pid"
后台运行应改为
poetry run uwsgi -d --ini uwsgi.ini
.pid文件地址见uwsgi.ini
安装 Nginx 并参考如下配置
# /html/vue 为前端 build 好后所在
location / {
alias /html/vue;
try_files $uri /index.html;
}
location /api {
include uwsgi_params;
uwsgi_pass unix:/tmp/pkuphy.sock;
}
# 无需 test 环境则不用配置
location /test/api {
rewrite ^/test/(.+) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/tmp/devphy.sock;
}
一般在本地使用
database init
一般情况下会同时需要添加开发者的学号,可直接运行一下命令。
student add 1234567890
本地开发时不使用 Flask-Migrate,因为本地开发数据库会更加频繁地变动,本地也 migrate 将导致历史混乱。
假设表名为 TableA
需要在数据库中先删去该表,再重新建立
database drop TableA
database init
而在准备上线时,可以现在测试环境生成数据库迁移脚本
db migrate -m "Initial migration."
检查脚本,
执行脚本,
db upgrade
并测试是否正常.
正式上线的时候,只需执行脚本即可。
一般来讲本地开发中数据内容需要更新,或者在服务器清除测试数据,会用到。
database delete TableA
一般在本地使用
database drop-all
database init
表示预约。众所周知,book 作为动词有预约的意思。为了和“书”做区分,特地加上ing
不是SB!(jiu shi)它的全名是Student-BookRec-Link-Table
Verification Code
,它居然看起来是一个单词