Impossible de démarrer la libération de l'échantillon Erlang généré avec des barres d'armature

StackOverflow https://stackoverflow.com/questions/7324556

  •  27-10-2019
  •  | 
  •  

Question

Je suis un débutant avec des barres d'armature et Erlang en général. Je tentais de créer une version de Erlang avec des barres d'armature selon ce tutoriel: http://www.metabrew.com/article/erlang-rebar-tutorial-generating-releases-upgrades et est resté coincé au point de désactivation de la marche généré.

Mon système est Ubuntu 11.04 64 bits, Erlang R14B03, installé à partir des sources.

Quand je suis appeler 'console bin / somenode', je reçois une des erreurs suivantes:

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 ()

Il est intéressant, à chaque fois que je le lance, différent atome est répertorié au lieu de « hipe_amd64_encode », par exemple: « hipe_amd64_defuse », « hipe_amd64_assemble », etc. Je devine que Erlang ne peut pas charger hipe, mais je ne sais pas pourquoi on essaie de le charger en premier lieu. La libération ne contient qu'une seule application très simple ne dépend que de noyau et stdlib.

Pour une raison quelconque, les barres d'armature génère un fichier .rel avec beaucoup d'applications inutiles:

%% 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}]}.

Pourquoi la liste des barres d'armature soo de nombreuses applications dans le fichier .rel? Et l'événement si elle va bien, pourquoi ne pas le début de sortie?

Était-ce utile?

La solution

Tout d'abord, vous pouvez essayer de voir ce qui échoue pendant le démarrage de la machine virtuelle en ajoutant les arguments init_debug à la machine virtuelle:

$ 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>

Avec cela, vous serez en mesure de voir avec plus de détails le genre d'interactions en cours. Il est peut-être que les bibliothèques sont chargées dans le mauvais ordre, vous ne soutenez pas natif, etc.


Deuxième question, le fichier rel contenant trop d'applications. Cela est probablement dû au fait que Rebar utilise Reltool OT générer des rejets, et que différentes applications peuvent être chargées en fonction de la commande est granulaire libère de génération (voir whne matériau incl_cond dans la documentation). Il y a quelques exemples pour cela dans le version est la Parole de chapitre de vous apprendre certains 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}]}
]}.

Et cela devrait générer de faibles rejets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top