0

我正处于为 CL 项目构建部署工具的设计阶段。

我想象典型的工作流程是这样的:

  1. (ql:quickload :yolo)
  2. (yolo:configure)
  3. 开发者添加远程机器用户和主机等...
  4. 开发人员上床睡觉。关闭电脑
  5. 早上:hack hack hack
  6. 是时候部署了。开发人员提交更改并转到 REPL 和类型 (yolo:deploy)

我想要的是让我的库知道开发人员希望根据当前包部署哪个系统。( *package*)

我的问题:是否可以找到加载特定包的系统?自然是我说的ASDF

额外的问题:甚至需要这样的工具吗?也许有更好的工作流程。我也打算把这个库做成一个可执行文件,不过这样就可以通过当前目录获取默认项目了。

4

2 回答 2

2

首先,在这里阅读有关系统的信息。

我认为推断预期的系统没有多大意义。无论如何,您至少需要一个附加参数(部署的目标

一些想法:

我想部署工具会部署一个系统。那么它可能会被合理地定义为 ASDF 的扩展。

例如,您可以设计这样的扩展,以便您可以以如下defsystem形式指定部署配置:

(defsystem #:foo
  :defsystem-depends-on (#:your-awesome-asdf-deploy)
  ;; ...
  :deploy-targets (:test (:host "test.example.org"
                          :user "foo"
                          :env (:backend-url "https://test.foo.org/api"
                                :dev t))
                   :prod (:host "prod.example.org"
                          :user "bar"
                          :env (:backend-url "https://foo.org/api"
                                :dev nil))))

然后可以在新的op deploy-op中使用此信息,您可以像这样调用它:

(asdf:oos 'asdf-deploy:deploy-op 'foo :target :test)
于 2017-01-07T23:07:33.207 回答
1

没有内置的方法来回答您的问题,但是如果在加载 asdf 后立即连接到(defmethod perform :after ((o load-op) (s system)) ...)一个函数,该函数将新条目列表与所有包列表进行比较,那么您可以建立一个索引,哪些系统创建哪些包.

于 2017-01-30T04:08:27.943 回答