rabbitmq-erlang-client, using rebar friendly pkg, works on dev env fails on rebar release

匿名 (未验证) 提交于 2019-12-03 01:03:01

问题:

I am successfully using the rebar-friendly package of rabbitmq-erlang-client for a simple Hello World rebarized and OTP "compliant" app and things work fine on the dev environment. I am able to fire up an erl console and do my application:start(helloworld). and connect to the broker, open up a channel and communicate to queues.

However, then I proceed to do rebar generate and it builds up the release just fine, but when I try to fire up from the self contained release package then things suddenly explode.

I know rebar releases are known to be an obscure art, but I would like to know what are my options as far as deployment for an app using the rabbitmq-erlang-client.

Below you will find the output of the console on the crash:

=INFO REPORT==== 18-Dec-2012::16:41:35 ===     application: session_record     exited: {{{badmatch,                {error,                 {'EXIT',                  {undef,                   [{amqp_connection_sup,start_link,                     [{amqp_params_network,<<"guest">>,<<"guest">>,<<"/">>,                       "127.0.0.1",5672,0,0,0,infinity,none,                       [#Fun<amqp_auth_mechanisms.plain.3>,                        #Fun<amqp_auth_mechanisms.amqplain.3>],                       [],[]}],                     []},                    {supervisor2,do_start_child_i,3,                     [{file,"src/supervisor2.erl"},{line,391}]},                     {supervisor2,handle_call,3,                     [{file,"src/supervisor2.erl"},{line,413}]},                     {gen_server,handle_msg,5,                     [{file,"gen_server.erl"},{line,588}]},                    {proc_lib,init_p_do_apply,3,                     [{file,"proc_lib.erl"},{line,227}]}]}}}},               [{amqp_connection,start,1,                 [{file,"src/amqp_connection.erl"},{line,164}]},                 {hello_qp,start_link,0,[{file,"src/hello_qp.erl"},{line,10}]},                {session_record_sup,init,1,                 [{file,"src/session_record_sup.erl"},{line,55}]},                {supervisor_bridge,init,1,                 [{file,"supervisor_bridge.erl"},{line,79}]},                {gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},                {proc_lib,init_p_do_apply,3,                 [{file,"proc_lib.erl"},{line,227}]}]},              {session_record_app,start,[normal,[]]}}     type: permanent {"Kernel pid terminated",application_controller 

EDIT: As requested in the comments.

reltool.config

{sys, [        {lib_dirs, ["..", "../deps"]},        {erts, [{mod_cond, derived}, {app_file, strip}]},        {app_file, strip},        {rel, "session_record", "0.1.0",         [          kernel,          stdlib,          sasl,          session_record         ]},        {rel, "start_clean", "",         [          kernel,          stdlib         ]},        {boot_rel, "session_record"},        {profile, embedded},        {incl_cond, derived},        {mod_cond, derived},        {excl_archive_filters, [".*"]}, %% Do not archive built libs        {excl_sys_filters, ["^bin/.*", "^erts.*/bin/(dialyzer|typer)",                            "^erts.*/(doc|info|include|lib|man|src)"]},        {excl_app_filters, ["\.gitignore"]},        {app, session_record, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]},        {app, hipe, [{incl_cond, exclude}]}       ]}.  {target_dir, "session_record"}.  {overlay, [            {mkdir, "log/sasl"},            {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},            {copy, "files/nodetool", "\{\{erts_vsn\}\}/bin/nodetool"},            {copy, "files/session_record", "bin/session_record"},            {copy, "files/session_record.cmd", "bin/session_record.cmd"},            {copy, "files/start_erl.cmd", "bin/start_erl.cmd"},            {copy, "files/install_upgrade.escript", "bin/install_upgrade.escript"},            {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},            {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}           ]}. 

回答1:

Try changing {mod_cond, derived} to {mod_cond, all}. That means that reltool will not try to be clever about which modules to take from the included applications. I suspect that your problem is that reltool didn't consider amqp_connection_sup to be necessary; you could confirm that by checking whether it's present in lib/amqp_client-0.8/ebin.



回答2:

Answer given by @legoscia worked. Here is sample, reltool.config

    %% -*- mode: erlang -*- %% ex: ft=erlang {sys, [        {lib_dirs, ["..","../deps"]},        {erts, [{mod_cond, all}, {app_file, strip}]},        {app_file, strip},        {rel, "chat_grabber", "1",         [          kernel,          stdlib,          sasl,            couchbeam,          chat_grabber         ]},        {rel, "start_clean", "",         [          kernel,          stdlib         ]},        {boot_rel, "chat_grabber"},        {profile, embedded},        {incl_cond, derived},        {excl_archive_filters, [".*"]}, %% Do not archive built libs        {excl_sys_filters, ["^bin/(?!start_clean.boot)",                            "^erts.*/bin/(dialyzer|typer)",                            "^erts.*/(doc|info|include|lib|man|src)"]},        {excl_app_filters, ["\.gitignore"]},        {app,couchbeam,[{mod_cond,app},{incl_cond,include},{lib_dir, "../deps/"}]},        {app, chat_grabber, [{mod_cond, app}, {incl_cond, include}, {lib_dir, ".."}]}       ]}.  {target_dir, "chat_grabber"}.  {overlay, [            {mkdir, "log/sasl"},            {copy, "files/erl", "\{\{erts_vsn\}\}/bin/erl"},            {copy, "files/nodetool", "releases/\{\{rel_vsn\}\}/nodetool"},            {copy, "chat_grabber/bin/start_clean.boot",                   "\{\{erts_vsn\}\}/bin/start_clean.boot"},            {copy, "files/chat_grabber", "bin/chat_grabber"},            {copy, "files/chat_grabber.cmd", "bin/chat_grabber.cmd"},            {copy, "files/start_erl.cmd", "bin/start_erl.cmd"},            {copy, "files/install_upgrade.escript", "bin/install_upgrade.escript"},            {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},            {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}           ]}. 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!