卡在 "init 终止于 do_boot",undef,[rmbrDb,start,[],[],

Posted

技术标签:

【中文标题】卡在 "init 终止于 do_boot",undef,[rmbrDb,start,[],[],【英文标题】:Stuck at "init terminating in do_boot",undef,[rmbrDb,start,[],[],卡在 "init 终止于 do_boot",undef,[rmbrDb,start,[],[], 【发布时间】:2014-11-03 02:01:30 【问题描述】:

我的项目在 .../deps 中有许多依赖项,其中两个包含在 .../apps 中的 Erlang 应用程序。 rebar.config:

sub_dirs, ["apps/rmbrDb","apps/rmbrRest","rel"].
lib_dirs, ["deps","apps"].

deps, [
    webmachine, "1.10.*", git, "git://github.com/basho/webmachine", "HEAD",
    riakc, ".*", git, "git://github.com/basho/riak-erlang-client", "HEAD"
].

项目编译 (./rebar get-deps compile) 没有错误,并且包含的​​应用程序确实会生成光束文件。

有问题的应用文件如下所示:

application,rmbrDb,
         [description,"Database Api for Main",
          vsn,"0.0.1",
          modules,[rmbrDb,rmbrDb_app,rmbrDb_sup],
          registered,[rmbrDb_sup],
          applications,[kernel,stdlib],
          mod,rmbrDb_app,[],
          start_phases,[]].

我尝试开始使用 shell 脚本:

exec erl -pa $PWD/ebin $PWD/deps/*/ebin $PWD/apps/*/ebin -boot start_sasl -s reloader -s rmbrDb -s rmbrRest

产生:

"init terminating in do_boot",undef,[rmbrDb,start,[],[],init,start_it,1,[],init,start_em,1,[]]
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

日志包含

=mod:rmbrDb
Current size: 7281
Current attributes: 836C0000000...
Current compilation info: 836C0000000...

=fun
Module: rmbrDb
Uniq: 118638513
Index: 0
Address: 0x000000001a52b6d0
Native_address: 0x0000000017c8d370
Refc: 1

这表明模块已加载。

rmbrDb_app 文件包含:

-module(rmbrDb_app).
-behaviour(application).
-export([start/2, stop/1]).
-spec start(normal | takeover, node() | failover, node(),
            any()) -> ok, pid() | ok, pid(), State::any() |
                      error, Reason::any().
start(_StartType, _StartArgs) ->
    case rmbrDb_sup:start_link() of
        ok, Pid ->
            ok, Pid;
        Error ->
            Error
    end.

所以定义了启动函数。

我在 OSX 10.9.4 上工作,使用 Erlang/OTP 17 [erts-6.1] [source] [64-bit] [smp:8:8] Erlang已经编译启动了一些项目,安装是最近的。

我不知道为什么 do_boot 无法启动 rmbrDb

请注意,其他应用程序也无法启动。以先到者为准。

【问题讨论】:

【参考方案1】:

erl-s 选项不会启动给定的应用程序,而是调用一个函数。函数名及其参数可以作为额外参数给出,但如果你只写-s rmbrDb,函数名将默认为start,参数列表为空列表,因此erl将尝试调用@987654329 @,并且 that 函数未定义 (undef)。请参阅the documentation page for erl 了解更多信息。

您应该考虑为您的应用程序创建一个版本。 this answer中有一些指针。

【讨论】:

我试图在EchoTeam Templates 之后创建一个版本,但是我在依赖版本冲突中失败了,我缺​​乏修复的知识。另外,就我个人而言,我不喜欢发布是特定于架构的,而应用程序却不是。 话虽如此,我投了赞成票,因为您对 start/0 与 start/2 的评论确实有帮助。

以上是关于卡在 "init 终止于 do_boot",undef,[rmbrDb,start,[],[],的主要内容,如果未能解决你的问题,请参考以下文章

如何将 N 个十进制数作为输入并打印数字,正在将故障转储写入:erl_crash.dump...done init 终止于 do_boot()

在 Ubuntu 18.04 上,RabbitMQ 未以消息“init terminating in do_boot,noproc”开头

如何让 RabbitMQ 在 Snow Leopard 64 位上运行?

rabbitmq运行异常

请问韦东山JZ2440开发板为啥新制作的文件系统启动,一直卡在Freeing init memory: 136K?

如何强制终止卡在等待启动生命周期操作状态的aws实例