I am trying to use this project for educational purposes: https://github.com/dronowar/erlang_rest_api
But problem with code compilation and make run-local:
erl -config config/sys -pa ./ebin -pa ./deps/*/ebin -sname erl@localhost -s erl -s sync
Erlang/OTP 24 [erts-12.1.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit] [dtrace]
{"init terminating in do_boot",{undef,[{erl,start,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot ({undef,[{erl,start,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]})
Crash dump is being written to: erl_crash.dump...done
make: *** [run-local] Error 1
2条答案
按热度按时间yc0p9oo01#
看起来Makefile与现代Rebar3版本不同步。我将
run-local
目标改为:(Note第二行以制表符开头,* 而不是 * 一连串空格。)
有了这个更改,节点为我启动,并抱怨无法连接到Postgres。
那么你怎么知道呢?你得到的错误是
{undef,[{erl,start,[],[]}
。这意味着它试图用零个参数调用模块erl
中的函数start
(参数列表是空的,[]
),但是没有这样的函数,要么是因为模块没有这样的函数,要么是因为整个模块都不能被加载。因此,我搜索了已编译的模块
erl.beam
:现在Rebar3喜欢把编译后的文件放到
_build
子目录,但是当编写erlang_rest_API时,它显然只使用了ebin
子目录。erl的-pa
参数表示模块的搜索路径,所以我们只需要在那里添加正确的目录,并删除现在不使用的-pa ./ebin -pa ./deps/*/ebin
。twh00eeo2#
老实说,这可能是很多事情。该项目是3-4岁,所有的deps是unpinned iidoee.将获取最新的版本。
也许值得把它们追溯到与这个项目同时代的东西上。
在Erlang 24中,rebar 3抱怨
erlang:get_stacktrace()
被删除,这意味着deps没有被编译。我试着用Erlang 20运行
make
,结果失败了,因为缺少C++编译器(我用的是Windows),但它确实在构建/编译过程中走得更远了。