Frage

Ich bin im Allgemeinen ein Anfänger mit Bewehrung und Erlang. Ich habe versucht, nach diesem Tutorial eine Erlang -Veröffentlichung mit Rebar zu erstellen: http://www.metabrew.com/article/erlang-rebar-tutorial generating-release-upgrades und blieb beim laufenden Zeitpunkt der Veröffentlichung festgefahren.

Mein System ist Ubuntu 11.04 64bit, Erlang R14B03, installiert aus Quellen.

Wenn ich 'Bin/Somenode -Konsole' anruft, bekomme ich einen der folgenden Fehler:

Exec: /home/ghik/Inz/somerel/rel/somenode/erts-5.8.4/bin/erlexec -boot /home/ghik/Inz/somerel/rel/somenode/releases/1/somenode -mode embedded -config /home/ghik/Inz/somerel/rel/somenode/etc/app.config -args_file /home/ghik/Inz/somerel/rel/somenode/etc/vm.args -- console
Root: /home/ghik/Inz/somerel/rel/somenode
{"init terminating in do_boot",{'cannot load',hipe_amd64_encode,get_files}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

Interessanterweise wird jedes Mal, wenn ich es ausführte, ein anderes Atom anstelle von 'hipe_amd64_encode' aufgeführt, zum Beispiel: 'hipe_amd64_defuse', 'hipe_amd64_assemble' usw. Ich vermute Ich versuche es überhaupt zu laden. Die Veröffentlichung enthält nur eine sehr einfache Anwendung, die nur von Kernel und Stdlib abhängt.

Aus irgendeinem Grund generiert Rebar eine .rel -Datei mit vielen unnötigen Anwendungen:

%% rel generated at {2011,9,6} {20,5,48}
{release,{"somenode","1"},
     {erts,"5.8.4"},
     [{kernel,"2.14.4"},
      {stdlib,"1.17.4"},
      {sasl,"2.1.9.4"},
      {someapp,"1"},
      {compiler,"4.7.4",load},
      {crypto,"2.0.3",load},
      {et,"1.4.3",load},
      {gs,"1.5.13",load},
      {hipe,"3.8",load},
      {inets,"5.6",load},
      {mnesia,"4.4.19",load},
      {observer,"0.9.9",load},
      {public_key,"0.12",load},
      {runtime_tools,"1.8.5",load},
      {ssl,"4.1.5",load},
      {syntax_tools,"1.6.7.1",load},
      {tools,"2.6.6.4",load},
      {webtool,"0.8.8",load},
      {wx,"0.98.10",load}]}.

Warum listet die Bewehrungsantrieb in der .rel -Datei viele Anwendungen auf? Und Ereignis, wenn es in Ordnung ist, warum beginnt die Veröffentlichung nicht?

War es hilfreich?

Lösung

Zunächst können Sie versuchen zu sehen, was beim Booten der VM fehlschlägt, indem Sie die Argumente hinzufügen init_debug zur VM:

$ erl -init_debug
{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,error_logger}
{start,application_controller}
{progress,init_kernel_started}
...
{progress,applications_loaded}
{apply,{application,start_boot,[kernel,permanent]}}
{apply,{application,start_boot,[stdlib,permanent]}}
{apply,{c,erlangrc,[]}}
{progress,started}
Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.4  (abort with ^G)
1>

Mit dieser Weise können Sie die Art von Interaktionen mit weiteren Details sehen. Es könnte sein, dass Bibliotheken in der falschen Reihenfolge geladen werden, Sie nicht native usw. unterstützen.


Zweites Problem, die REL -Datei mit zu vielen Anwendungen. Dies ist wahrscheinlich darauf zurückzuführen, dass Rebar Reltool OT erzeugt und dass verschiedene Anwendungen geladen werden können, je nachdem, wie körnig die Kontrolle ist, die die Kontrolle erzeugt (siehe incl_cond Material in den Dokumenten). Es gibt einige Beispiele dafür in der Freigabe ist das Wort Kapitel von Learn You Einige Erlang:

{sys, [
 {lib_dirs, ["/home/ferd/code/learn-you-some-erlang/release/"]},
 {erts, [{mod_cond, derived}, % derived makes it pick less stuff
         {app_file, strip}]},
 {rel, "erlcount", "1.0.0", [kernel, stdlib, ppool, erlcount]},
 {boot_rel, "erlcount"},
 {relocatable, true},
 {profile, embedded}, % reduces the files included from each app
 {app_file, strip}, % reduces the size of app files if possible
 {incl_cond, exclude}, % by default, don't include apps. 'derived' is another option
 {app, stdlib, [{mod_cond, derived}, {incl_cond, include}]}, % include at the app
 {app, kernel, [{incl_cond, include}]},                      % level overrides the
 {app, ppool, [{vsn, "1.0.0"}, {incl_cond, include}]},       % exclude put earlier
 {app, erlcount, [{vsn, "1.0.0"}, {incl_cond, include}]}
]}.

Und dies sollte kleinere Veröffentlichungen erzeugen.

Andere Tipps

Hinzufügen reltool.config, die folgende Zeile:

{app, hipe, [{incl_cond, exclude}]}

Ich kenne die gute Antwort nicht, aber ich weiß, dass ich mit ein paar verschiedenen Kernel keine Veröffentlichung mit mehreren CentOS -Versionen mit ein paar Kerneln beginnen konnte, daher ist dies nicht gerade ungewöhnlich. Durch das Upgrade auf 5.6 wurde es endlich funktioniert. Sie können sehen, welche OSS hier tatsächlich jeden Tag getestet werden:

http://www.erlang.org/doc/installation_guide/install.html#id62915

Sie könnten auch ohne Hipe kompilieren, denke ich.

In letzter Zeit habe ich diesen Beitrag gefunden:http://mokele.co.uk/2011/07/01/reebar-release-upgrade-caveats.html

Es entdeckt eine Liste von Fehlern in der Bewehrung, von denen einer der Grund ist, warum meine Veröffentlichung nicht starten konnte. Es werden auch Korrekturen veröffentlicht. Ich hoffe, sie werden so schnell wie möglich in das Haupt -Bewehrungs -Repository zusammengefasst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top