我试图了解如何使用Shake
以及如何建立新规则。作为练习,我决定实施我所说的backup
规则。
这个想法是如果文件不存在或者文件太旧(让我们超过 24 小时),则生成一个文件。我喜欢将长命令存储在生成文件中并按需运行它们。一个例子是 mysql 备份。唯一的问题是当备份已经存在时,make
什么都不做。为了解决这个问题,我可以
- 在重做新备份之前删除以前的备份,
- 制作备份目标
phony
- 添加一个虚构的
force
依赖项,我可以手动或在 cron 中触摸它。
我想要的是重做备份,如果它超过 24 小时(我可以用一个touch force
in cron 来做)。无论如何,这只是一个可以玩的例子Shake
。我想要的是这样的:
expirable "my_backup" 24 \out -> do
cmd "mysqldump" backup_parameter out
我阅读了文档,但我不知道如何执行此操作或定义规则以及 anAction
是什么。我知道我需要实例化一个Rule
类,但我不知道是什么。
澄清
我不希望备份自动运行,而是仅按需运行,但每 24 小时最多运行一次。
一个示例场景是我在远程机器上有一个生产数据库,本地复制并在本地运行一些耗时的报告。正常的工作流程是
- 下载生产备份
- 用它刷新本地数据库
- 在本地仓库数据库上创建一些非规范化表
- 生成一些报告。
我不是每天都运行报告,而是仅在需要时运行。所以我不想每 24 小时运行一次报告。除了时间位之外,使用 makefile 很容易,它们可以解决,但它再次是一个人为的示例,可以深入了解 Shake 的工作原理。
所以,当我第一次make report
备份数据库时,运行所有内容并生成报告。现在,我想修改报告(因为我正在测试它)。我不需要重新生成备份(也不需要刷新本地数据库)(我们是晚上,我知道直到第二天生产都没有任何变化)
然后第二天,或者下个月,我重新运行报告。这次我需要再次完成备份,并且所有依赖项也需要重新运行。
基本上我需要的规则是
重做时间戳=时间戳<旧
是
重做时间戳 = 时间戳 < 旧 || 现在 > 时间戳 + 24*36000
但我不知道把这条规则放在哪里。
问题更多的是把它放在哪里,而不是如何写它(它在上面)。如果它更容易(解释)我可以有一个规则询问用户(getLine)“你想重做这个目标(是/否)吗?”。
稍后我还将需要一个规则,具体取决于数据库(或特定表)的最后更新。我知道如何从数据库中获取信息,但不知道如何将其集成到 Shake 中。
我可能对 aRule
是什么感到困惑。制定规则是关于如何制定目标(所以它更像是一个食谱)或者我认为是摇动中的行动。在哪里,当我说规则时,我指的是决定是否重新制作目标的规则,而不是如何去做。在 make 中,您没有选择权(它是时间戳),因此没有这样的概念。