发布升级文件

要定义如何在某个发布的新旧版本之间进行升级和降级,我们要创建一个发布升级文件,或简称 relup 文件。

该文件无须手工创建,可以使用 systools:make_relup/3,4 进行生成。使用相关版本的 .rel.app.appup 文件作为输入。除去了哪些应用应该被添加或者删除和哪些应用应该被升级或降级。它的指令都是从 .appup 文件中获得并按照正确的顺序转换成单独的一个低级指令的列表。

relup 文件相对简单,可以被手工创建。但记住它只能包含低级指令。

发布升级文件的语法和内容在 relup(4) 中有详细的阐述。

例如,继续前一节的例子。我们有一个 ch_app 的新版本“2”和一个 .appup 文件。我们还需要一个 .rel 文件的新版本。这时该文件叫做 ch_rel-2.rel 发布版本串由“A”改成了“B”:

  1. {release,
  2. {"ch_rel", "B"},
  3. {erts, "5.3"},
  4. [{kernel, "2.9"},
  5. {stdlib, "1.12"},
  6. {sasl, "1.10"},
  7. {ch_app, "2"}]
  8. }.

现在可以生成 relup 文件了:

  1. 1> systools:make_relup("ch_rel-2", ["ch_rel-1"], ["ch_rel-1"]).
  2. ok

会生成一个 relup 文件,它包含了如何从版本“A”(“ch_rel-1”)升级到版本“B”(“ch_rel-2”)的指令,以及如何从版本“B”降级到版本“A”的指令。

注意旧的和新的版本的 .app.rel 文件必须在代码路径中, .appup 和(新的) .beam 文件也必须是。它还可以通过参数 path 扩展代码路径:

  1. 1> systools:make_relup("ch_rel-2", ["ch_rel-1"], ["ch_rel-1"],
  2. [{path,["../ch_rel-1",
  3. "../ch_rel-1/lib/ch_app-1/ebin"]}]).
  4. ok