1

我们有一个 Shake 构建系统,其中一些规则与 Postgres 数据库对话,作为一个持久的后台服务。我们如何使用 Shake 确保服务在需要时启动,并在 Shake 完成后关闭?

特别是,如果没有规则使用它,我们不希望启动该服务,如果使用它,我们不希望它在运行期间多次启动/停止。

4

1 回答 1

1

在 Shake 中实现此模式的一种方法是:

rules = do
    startService <- newCache $ \() -> do
        ... start the service here ...
        runAfter $ ... shut down the service here ...

    "*.txt" %> \out -> do
        startService ()
        ... use the service here ...

我们创建一个名为 的缓存项startService。仅在需要时使用newCache该操作最多执行一次。我们可以启动服务但是有意义(甚至可能首先构建服务)。我们runAfter用来关闭服务,该服务将在 Shake 完成执行后运行。

为了确保该服务在任何规则中都可用,我们首先需要调用startService ().

作为一个相关功能,如果您有一个规则,您不需要持久化服务,而只是为了批量操作,请参阅该batch功能。

于 2018-10-15T11:28:31.677 回答