[DSL]模式匹配与请求跳转

具体上次撰写博客有一段时间了。这段时间内自己学些了很多,想了很多,尝试去理解了很多。结果之一是不管这个博客是为了什么而建立的,我还是把自己的技术思考记录下来。

本文描述是自己在工作中实现的一种DSL。DSL是个人今天年初左右才决定的发展方向,只是在具体工作中使用还是第一次。希望这可以作为自己在技术上选择性发展的一个好的开端。
由于是工作中开发出来的一种DSL,所以不会讲太具体的业务场景,而是以技术设计与实现为主。
本DSL的设计目的的核心如题,模式匹配和请求跳转。结合起来就是按照某种业务规则以模式匹配的方式决定请求是否跳转。更直接的一种表达方式是if else决定是否要redirect,只是这段if else是用DSL定义的。
使用DSL定义规则的好处在于更清晰地展现跳转的条件,避免技术实现给业务规则辨识带来的”噪音”,特别是复杂的跳转规则。其次是快速支持规则的变化,比如易变(不管是运行时易变,还是需求期易变)的规则,附带的另外一个好处是如果业务上需要动态定义的话,DSL可以快速支持,不再需要通过数据库设计,配置等传统方式。

Read More

rsync与fabric

上篇
最近学习rsync,突然想到自己之前使用fabric上传工程时与其用tar上传再解压缩还不如用rsync增量传输,后者可以更快。查了下fabric的文档,发现有提供几个方法:

第一个就是使用rsync,第二个其实和我之前的方法一样采用压缩包传输的。rsync_project个人认为实际上就是local(“rsync xxx”)的模板,参数并不是很全。

但是使用了之后我还是考虑使用第二个方法upload_project,原因是rsync和fabric的ssh登录是分离的:rsync_project需要我重新输入一次密码,不输入的话就需要退化成local加上sshpass。再考虑到一开始可能没有输入密码,代码可能会变成这样:

如果不想输入两次密码的话,就必须在代码上或者命令行上写上密码,不是很安全。考虑再三,还是使用fabric提供的upload_project,虽然压缩可能慢一点。