2011-06-15 10 views
7

que tienen aplicaciones necesarias en el archivo st_db.app como este:Erlang: ¿cómo puedo iniciar automáticamente todas las aplicaciones necesarias para la aplicación?

{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, []} 
]}. 

tengo que empezar a ellos (cripto, sasl, etc.) de forma automática para ejecutar y depurar la aplicación principal. La única solución que encontré es comenzar con tales ERL params:

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

es que la única manera?

PD: btw couchbeam no se inicia en el nodo. Simplemente inicia el supervisor de couchbeam, así que tengo que ejecutarlo en shell manualmente.

=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] 

¿Hay alguna manera de solucionarlo?

Respuesta

4

o bien puede emitir una serie de comandos "eval" application: start (coucnbeam) "para erl, o hacerlo de la manera correcta de OTP y usar reltool para generar un nuevo archivo de arranque para usted.

Ver http://www.erlang.org/doc/man/reltool.html para obtener información sobre reltool, también barras de refuerzo hace un trabajo excelente en hacer gran parte del trabajo pesado para usted lo que es posible que desee ver en eso también (http://github.com/basho/rebar)

5

Si se acaba de jugar un poco en la consola y no quiere tener que escribir todas estas 'aplicación: inicio (...).' líneas, simplemente coloque estas cosas en el archivo .erlang en su directorio de trabajo actual. He aquí un ejemplo de lo que estoy trabajando ahora mismo:

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

Esto comienza todos mis dependencias, y luego la aplicación que estoy trabajando en este momento, foo.


Si desea generar un comunicado reltool con barras de refuerzo, este enlace puede ayudar:

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

En concreto, este GIST:

https://gist.github.com/3728780

-Todd

0

En el módulo de aplicación de devolución de llamada, acaba de escribir:

-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. 
Cuestiones relacionadas