Open edX课程备份工具
文章目录
缘起
就教育而言,内容始终是个宝贵资源,随着平台课程增多,如何备份就是个摆上日程的问题了,当课程还少的时候,采用定人定期备份的方式也觉得尚可接受,可手动备份的缺陷太多
- 重复性的导入导出极其乏味,浪费时间
- 导出课程名是随机字符,很闹归类
- 人类不善于且厌恶重复性的工作,容易出错
这类工作让代码来做再合适不过了,所以我写了个备份Open edx课程的工具,已经上传到github和pypi,直接安装就可使用
使用
当前版本只支持python2
建议采用virtualenv来管理环境(virtualenv -p /usr/bin/python2 env),使用centos的同学最好采用以上建议,其他操作系统的其他同学可以无视
我们先来看下如何使用,十分简单,首先安装它:pip install course_backup
安装完成后,执行course_backup --help
会看到参数提示
首先你需要登录studio,查看你的cookies中sessionid和csrftoken字段,然后填入配置文件,默认的配置文件为~/.backup_course.ini
,当然你也可以自己指定它
我的配置文件为(cat ~/.backup_course.ini):
|
|
填好配置文件后就可以启动备份任务啦
现在开始备份
course_backup –start
晚上两点开始备份
course_backup –start –night
指定配置文件
course_backup –start –config_file ./my_config_file.ini
指定备份目录
course_backup –start –courses_data_path /tmp/data
滚动备份
course_backup –start –night –interval_days 7 –courses_data_path /tmp/data
每七天备份一次,滚动周期为3周(超过3周的文件将自动删除)
Todo
- 滚动备份
- 只备份差异版本
- 定时任务(for humans)
- 云端同步
反思
这个自己写的工具从使用来看倒是挺顺手的。不过设计的时候,有一点始终让我左右为难:是提供一体化的解决方案好,还是让工具只专注在一件事(诸如只下载课程),然后把它和其他linux工具组合起来使用
《Unix编程艺术》里建议说
do one thing,and do well
这也是Unix哲学提倡的。
陷入到实际项目中,什么叫one thing呢?就很让人头疼,在这里我可能觉得backup courses整件事就是one thing,而其他人可能觉得download course是one thing,other thing可以通过组合其他工具,这样最终完成backup courses,诸如:
- course_backup提供download course指令(粒度似乎很合适,利落)
- course_backup提供所有课程id
- 通过course_backup首先获得所有id,然后通过bash写一个循环来download all courses
- 使用cron来写定时任务
- 使用bash来写滚动备份功能
如果你真的这样做,你可能会发现,实际上我们只是把编程的任务从python移交到bash脚本里。
在bash里写逻辑是我极不情愿做的一件事,相比于shell里那些好用的工具(vim/grep/find/sed…),bash的语法简直丑哭。所以就我而言我会选择尽可能用python把逻辑写到course_backup里,对外暴露出配置选项,那么我的one thing粒度可能大一些
即便如此我对一些东西是不是应该包含在工具内还是犹豫不决,即便现在也是,诸如定时任务功能是应该用系统的cron来做还是采用python的定时任务模块来写到工具内部,写在外部的好处是:
- 用户可以自由写定时任务
- 代码简介干净
而混杂在工具里,就是这个工具不得不是一个常驻进程,同时为了追求灵活的配置参数,解析参数的代码也会很长,而这些本不是核心代码,不过是重造了一个丑陋的车轮
可把定时功能混和在工具里,也有好处
- 对用户而言,上手容易,不需要而外去学cron和linux脚本
当然你可以说这是我对目标用户的定位不够清晰。这又是另一种度
的问题了。工程问题也许就许多这一类各种因素都需要权衡的问题
关于one thing的粒度,我一直拿捏不好,不知道别人是不是也有这个疑惑。我的自我安慰是这是一件需要权衡的事,也许还包含武断/拖鞋的/拍脑袋的过程,也许我们会把它称为直觉,无论用哪个词,指的似乎都是非理性的判断过程
这可能也是《Unix编程艺术》书名中艺术的所指吧
我并不是说我不喜欢do one thing,and do well
这个建议,相反,它可能是我最喜欢的几个编程箴言之一,它优美而非线性,需要我们不断打磨练习和试错。在我读过的所有计算机的书里,《Unix编程艺术》和《代码大全》可能是我最喜欢的两本实践类指导书籍,我把他们看做best practice。
付诸直觉的事,尤其是在各种特质中做折衷选择的事,决策者肯定都会有足够的理由为自己辩护,最后我们能说的可能只有
Talk is cheap, show me your code
创建项目
上传到pypi
源码
文章作者 种瓜
上次更新 2016-04-12