【问题标题】:systools.make_tar can't find .app files in the .ez archivesystools.make_tar 在 .ez 存档中找不到 .app 文件
【发布时间】:2013-02-06 20:29:54
【问题描述】:

我正在使用reltool 创建一个版本。输出文件夹 rel/lib 包含所有应用程序,其 ebin 文件夹打包到 .ez 档案中,例如对于crypto

crypto-2.2
crypto-2.2/priv/ (with some files in the priv folder)
crypto-2.2.ez
crypto-2.2.ez/crypto-2.2/ebin/crypto.app
crypto-2.2.ez/crypto-2.2/ebin/ (with some .beam files in the ebin folder)

我在rel 文件夹中启动erlebin 文件夹的路径位于代码路径中,即 code:get_path(). 会返回其中(对于 lib 文件夹中的其他应用程序也是如此):

"/usr/home/g/work/project/rel/lib/crypto-2.2.ez/crypto-2.2/ebin"

但是当尝试调用systools:make_tar("releases/0.1/project"). 时,它抱怨它找不到.app 文件(对于发布中提到的所有应用程序):

crypto: File not found: "crypto.app"

我看到.app 文件在存档中,只是systools 由于某种原因看不到它。我尝试在使用path 选项调用make_tar 时指定ebin 文件夹,但它似乎不起作用(缺少crypto.app 的相同错误)。另外:

file:consult("/usr/home/g/work/project/rel/lib/crypto-2.2.ez/crypto-2.2/ebin/crypto.app").

给我:{error,enotdir}

也许systools 还没有处理档案?有没有其他方法可以从reltool 发布的版本中创建 tar 存档?任何帮助将不胜感激。

【问题讨论】:

    标签: erlang release erlang-shell reltool


    【解决方案1】:

    您还可以通过将以下内容添加到 reltool.config 从 .ez 文件中排除 ebin 目录来完全避免这种情况

    {excl_archive_filters, ["^include$","^priv$","^ebin$"]}
    

    在大多数情况下,这基本上意味着禁用大多数 .ez 文件的创建,但该版本应该仍然可以正常工作。

    【讨论】:

    • 谢谢,我知道。但这意味着完全禁用 .ez 档案(因为目前只有 ebin 去那里)。因此,与其禁用该功能,我宁愿找到一种使其工作的方法,或者听听某人说确实在某些旧模块中访问 .ez 档案中的文件不起作用。但在某种程度上,这是解决问题的方法。只是不是我(理想情况下)寻找的。顺便说一句,另一种解决方法是解压缩所有 .ez 档案并运行 systools,但同样,它似乎仍然不是正确的解决方案。
    • 明白。那我不知道有什么解决办法。我不记得我停止使用 .ez 文件的确切原因,但我遇到了足够多的复杂情况,我认为这不是麻烦。如果您还没有询问 Erlang 邮件列表,我建议您试一试。
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 2018-08-18
    • 2017-04-13
    • 2020-08-25
    • 2019-09-09
    相关资源
    最近更新 更多