本来以为现在写去年的年终总结已经太晚了,可是copy去年的总结的时候发现去年是2月19日写的,还不算太晚,毕竟今年比去年更忙。
Ok,接下来是每年的总结及计划模版。
2020总结
这是2020年初列的计划
AWS_ACCESS_KEY_ID(或AWS_ACCESS_KEY)/AWS_SECRET_ACCESS_KEY(或AWS_SECRET_KEY)/AWS_DEFAULT_REGION/AWS_REGION
,除了放到环境变量,它一般也可以存储在~/.ssh/aws/credentials
文件里不同操作系统安装方式见Installing, updating, and uninstalling the AWS CLI version 2 on Linux,包括mac都可以直接安装的
可以在~/.aws/config
中配置多个profile
1 | [default] |
使用的时候可以这样指定
1 | aws ec2 describe-instances --profile user1 |
Running Instances -> See all regions
操作->实例设置->更改实例类型
Actions -> Instance State -> Stop
Elastic Block Store -> Volumes
Modify Volume
,然后输入大小df -h
查看当前磁盘容量在实例详里面找到root volumn,进入volumn详情
Actions -> Modify Volume
,输入扩容后的大小点击确定
进入实例,此时用df -h
查看依然是原来的大小,使用lsblk
命令可以查看有新的大小,该命令用于查看是否具有必须扩展的分区,例如:
1 | xvda 202:0 0 30G 0 disk |
执行扩容命令
1 | # 有时候lsblk看到的磁盘名称和df -h显示的磁盘名称不一致,没关系,下面的命令按照lsblk的来就行 |
步骤
创建卷
操作->连接卷
,默认会挂载到/dev/sdf
进入实例,执行lsblk
可以看到附加的卷(磁盘)
新卷默认是没有文件系统的,可以这样确定:
1 | sudo file -s /dev/xvdf # 如果输出是/dev/xvdf: data表示没有文件系统 |
挂载
1 | sudo mkdir /data # 创建挂载点 |
collection
的名称,mongoose
会自动将Model名转换为小写复数形式作为collection
名1 | import mongoose from 'mongoose'; |
1 | $('#exampleTable').dataTable({ |
Django自带了表单功能,可以与前端及后端完美集成,能非常方便地提供创建、更新或删除模型。
1 | class Post(models.Model): |
python自带库ftplib对ftp的连接提供了支持。下面是其基本的语法
1 | ftp = ftplib.FTP(timeout=300) # 连接基本的FTP |
在本地开发的时候,由于有很多东西依赖于cookie
,有些插件在写入cookie
的时候可能没有判断服务端口导致无法写入cookie
,功能无法正常使用,所以在开发和使用过程中最好用正常的http
端口,即80
或443
开发时最好打开调试模式:
1 | # vim wp-config.php |
在wordpress
源码的/wp-content/plugins
下,一个目录就是一个插件
插件内部的目录结构一般是这样的:
1 | test-plugin |
1 | $user = wp_signon(['user_login' => 'xxx', 'user_password' => 'xxx'], false); |
user_status
字段,最后我只能$wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 1 WHERE ID = %d", $user->ID ))
来吧用户spam了1 | wp_update_user([ |
1 | get_user_by( 'id', $userId ); |
目前项目要为所有的请求添加调用频率限制,使用的是node-rate-limiter-flexible插件,后端api项目可以直接在将其作为一个Koa Middleware,但是前端却不能直接这样引用,因为我们前端使用了nuxtjs
,如果直接将该插件作为koa middleware
插入app
中,那么每一个请求都会经过该插件的统计,包括页面中所有的静态文件请求等,但这其实并不是我们想要的,我们其实只想针对路由route
进行统计和过滤。这时候可以将该插件插入nuxtjs
的serverMiddleware
中去,作为nuxtjs
的服务端中间件使用。
serverMiddleware
的执行时机是服务端开始渲染页面之前,所以是服务端渲染的中间件
serverMiddleware
可以针对指定的路由,如果不指定,则表示针对所有的路由
其配置是在nuxt.config.js
中的,例如:
1 | serverMiddleware: [ |
1 | npm install --save-dev @types/node @types/validator |
注意上一步创建的config目录默认是json格式的,我们一般会想从.env文件中读取配置,通常要将它改成config.js
文件,例如:
1 | require('dotenv').config() |
1 | var sequelize = new Sequelize('mysql://用户名:密码@HOST:3306/数据库', { |
UUID
,defaultValue为UUIDV1
或者UUIDV4
1 | // 定义方式零,纯typescript的方式可以使用https://github.com/RobinBuschmann/sequelize-typescript |
sequelize
默认会给关联关系添加对应的读取方法,例如如果和user关联,那么会有getUser
方法,而如果是一对多,或者多对多,那么会有getUsers
方法,但是如果是typescript
,就需要我们先将该方法声明一下
1 | public getUsers: BelongsToManyGetAssociationsMixin<UserModel> // 懒加载 |
1 | // 装饰器定义 |
1 | const Foo = sequelize.define('foo', { name: DataTypes.STRING }); |
target_id
和target_type
来表示关联的表的类型1 | // 例如一个用户有多篇文章,多辆车,一篇文章或者一辆车也能同时属于多个用户,那么就有这么几张表: Car, Post, User, UserThings关联表 |
1 | const user = await User.create({ firstName: "Jane", lastName: "Doe" }); |