2013-04-09 18 views
0

我尝试建立ChicagoBoss所有它的依赖到ERL_LIBS环境变量。我ChicagoBoss,编译它./rebar get-deps && ./rebar compile,现在我有ChicagoBoss在/home/user/ChicagoBoss目录,它是依赖于/home/user/ChicagoBoss/deps目录。我想将它添加到ERL_LIBS。我把我的.bashrc文件以下行:设置ChicagoBoss所有DEPS到ERL_LIBS

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

但是当我尝试从ChicagoBoss依赖的东西,ranch应用例如用:

application:start(ranch).

我得到错误:

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

谢谢。

回答

1

ERL_LIBS环境变量没有通配符的概念。当您使用参数启动erl-pa deps/*/ebin,你扩大通配符。你需要每一个库路径(路径应用,而不是它的ebin目录!)手动添加到ERL_LIBS

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

import glob 
print ':'.join(glob.glob('/home/user/*/deps/*/')) 
0

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

编辑: 有趣的是,我已经得到了一个消息,说编译: “依赖不可用:牧场 - *({混帐,” 混帐://github.com/extend/ranch.git “ ” 主“})” 这必须是关于缺少'dep'顶级目录的警告。

0

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

/place/Project1 

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

正如canbe上面看到,/地点/ PROJECT1/DEPS为其他子项目(依赖关系)的容器。在这种情况下,如果您可以运行您的应用程序

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