2011-06-15 5 views
7

J'ai des applications nécessaires dans un fichier st_db.app comme celui-ci:Erlang: comment démarrer automatiquement toutes les applications nécessaires à l'application?

{application, st_db, 
[ 
    {description, ""}, 
    {vsn, "1.0.0"}, 
    {registered, []}, 
    {modules, [st_db_app, st_db_sup, st_db]}, 
    {applications, [ 
        kernel, 
        stdlib, 
      sasl, 
      crypto, 
      ibrowse, 
      couchbeam 
       ]}, 
    {mod, { st_db_app, []}}, 
    {env, []} 
]}. 

Je dois commencer les (Crypto, SASL, etc.) automatiquement pour exécuter et déboguer l'application principale. La seule solution que je trouve est de commencer ERL avec ces params:

erl -pa ./ebin -pa ./deps/*/ebin -boot start_sasl -s couchbeam -s crypto -s ibrowse 

Est-ce que la seule façon?

PS: btw couchbeam ne démarre pas sur le noeud. Il suffit de lancer le superviseur de couchbeam, donc je dois le lancer manuellement shell

=PROGRESS REPORT==== 15-Jun-2011::10:22:43 === 
      supervisor: {local,couchbeam_sup} 
      started: [{pid,<0.62.0>}, 
         {name,couchbeam}, 
         {mfargs,{couchbeam,start_link,[]}}, 
         {restart_type,permanent}, 
         {shutdown,2000}, 
         {child_type,worker}] 

2> application:start(couchbeam). 
ok 
3> 
=PROGRESS REPORT==== 15-Jun-2011::10:23:25 === 
      supervisor: {local,couchbeam_sup} 
      started: [{pid,<0.69.0>}, 
         {name,couchbeam}, 
         {mfargs,{couchbeam,start_link,[]}}, 
         {restart_type,permanent}, 
         {shutdown,2000}, 
         {child_type,worker}] 

=PROGRESS REPORT==== 15-Jun-2011::10:23:25 === 
     application: couchbeam 
      started_at: [email protected] 

Y a-t-il un moyen de le réparer?

Répondre

4

soit vous pouvez lancer une série d'application "eval": démarrez (coucnbeam) "les commandes à erl, ou faites-le correctement et utilisez reltool pour générer un nouveau fichier de démarrage pour vous.

Voir http://www.erlang.org/doc/man/reltool.html pour plus d'informations sur reltool, également des barres d'armature fait un travail excelent à faire beaucoup de soulever des objets lourds pour vous afin que vous voudrez peut-être examiner cela aussi bien (http://github.com/basho/rebar)

5

Si vous êtes déconner dans la console et ne veulent pas avoir à taper toutes ces applications: start (...). lignes, juste mettre ces choses dans le fichier .erlang dans votre répertoire de travail actuel. Voici un exemple de ce que je travaille en ce moment:

$ cat .erlang 
application:start(crypto). 
application:start(public_key). 
application:start(ssl). 
application:start(ibrowse). 
application:start(foo). 

Cela commence toutes mes dépendances, puis l'application, je travaille en ce moment, foo.


Si vous souhaitez générer un communiqué de reltool avec des barres d'armature, ce lien pourrait aider:

When to use erlang application:start or included_applications and a supervisor?

Plus précisément, ce point essentiel:

https://gist.github.com/3728780

-Todd

0

Dans votre module de rappel de l'application, il suffit d'écrire:

-module(st_db_app). 
-behaviour(application). 
-export([start/2, stop/1]). 

start(_StartType, _StartArg) -> 
    %% Get application name 
    {ok, AppName} = application:get_application(), 
    %% Start all dependencies that are not yet started for application name 
    {ok, _StartedApps} = application:ensure_all_started(AppName), 
    %% start application's root supervisor or do other initialization here 
    %% and return root supervisor's pid. 
Questions connexes