0

我尝试设置 ChicagoBoss 及其对ERL_LIBS环境变量的所有依赖项。我得到了 ChicagoBoss,用 编译它./rebar get-deps && ./rebar compile,现在我在目录中有 ChicagoBoss,它在/home/user/ChicagoBoss目录中有依赖项/home/user/ChicagoBoss/deps。我想将它添加到ERL_LIBS. 我将以下行放入我的.bashrc文件中:

export ERL_LIBS=/home/user/ChicagoBoss/:/home/user/*/deps/*/

但是当我从 ChicagoBoss 依赖项中尝试一些东西时,ranch应用程序例如:

application:start(ranch).

我收到错误:

{error,{"no such file or directory","ranch.app"}}

谢谢你。

4

3 回答 3

1

ERL_LIBS环境变量没有通配符的概念。当您以 之erl类的参数开头时-pa deps/*/ebin,您的shell正在扩展通配符。您需要手动将每个库路径(应用程序的路径,而不是其ebin目录!)添加到ERL_LIBS.

为了简化这个过程,我们可以使用 Python:

import glob
print ':'.join(glob.glob('/home/user/*/deps/*/'))
于 2013-04-10T08:19:52.620 回答
0

我在一个简单的应用程序中遇到了相同的错误。事实证明,主应用程序目录中缺少一个“dep”目录:牧场安装在那里。我不知道为什么在我的情况下它丢失了,但我通过从另一个工作的牧场应用程序复制该目录来解决它。

编辑:有趣的是,我收到一条消息编译说:“依赖不可用:牧场-。*({git,”git://github.com/extend/ranch.git“,”master“})”必须有是关于缺少“dep”顶级目录的警告。

于 2013-08-19T16:08:44.967 回答
0

ERL_LIBS可以简单地指向所有依赖项项目所在的父目录。如果您的项目遵循 Erlang 项目目录约定( yourproject/src、yourproject/ebin、yourproject/include ),那么 Erlang 将动态关联 ebin 并包含从这些项目到您的上下文。

例子

/place/Project1

/place/Project1/ebin/...
/place/Project1/include/...
/place/Project1/deps/...
/place/Project1/deps/DependencyProject2...
/place/Project1/deps/DependencyProject3...

如上所示,/place/Project1/deps是其他子项目(依赖项)的容器。在这种情况下,如果您可以将应用程序运行为

erl env ERL_LIBS "/place:/place/Project1/deps"。这将包括运行时上下文中的所有相关项目(Project1、DependencyProject2 和 DependencyProject3)。

于 2013-11-02T11:27:58.893 回答