[erlang-questions] supervising applications

Bob Ippolito <>
Wed Sep 20 02:43:56 CEST 2006


On 9/19/06, Moe Aboulkheir <> wrote:
>
>
> On Tue, 19 Sep 2006 17:12:10 -0700, Bob Ippolito <> wrote:
> >On 9/19/06, Moe Aboulkheir <> wrote:
> >>Hi,
> >>
> >>I'm very new to this.  I've written a trivial Erlang application, and i am
> >>trying to write a second one which provides a superset of the functionality
> >>of the first.  The supervisor that is started from start/2 in the second
> >>application tries to start the first application by including an entry for
> >>it in the list returned from init/1.  I tried the following two methods,
> >>but neither works:
> >>
> >>1) Having StartFunc (in the init/1 term) as {application, start, [app1]}.
> >>This doesn't work because application:start/1 returns ok instead of {ok,
> >>Pid} like the supervisor interface wants.  Ideally i'd have liked to be
> >>able to this, because app1:start/2 passes some stuff from its environment
> >>as the argument to app1_supervisor:start_link/1, but i guess i could move
> >>that stuff further into app1, though i saw an example that did the setup
> >>here, and it makes sense to me
> >>
> >>2) Having StartFunc as {app1_supervisor, start_link, ...}.  This doesn't
> >>work because some code inside app1 depends on things in the environment of
> >>app1's .app file - things that don't seem to be available when i start it
> >>like this.  Again, i could move these variables into app2's environment,
> >>but i'd like to be able to use app1 without using app2, and would rather
> >>not maintain the information in two places.
> >>
> >>Any ideas?
> >
> >Isn't this what you'd use the {applications, [app1, ...]} list for in
> >the .app file?
> >
> >-bob
> >
>
> I tried that before (putting app1 in app2's "applications" list and starting its supervisor directly from app2), but I get an {error,{not_started,app1}} when starting app2.  the docs say:
>
> """
> [when starting an application]
> The application controller checks the value of the application specification key applications, to ensure that all applications that should be started before this application are running. If not, {error,{not_started,App}} is returned, where App is the name of the missing application.
> """
>
> Which seems to indicate that as long as app1 is in app2's applications list, it won't be possible to start it from app2's start() - and cursory examination (an erlang:display() in start()) indicates that it doesn't even get that far.

I think that's taken care of when you create a boot script from the
.app, though...

-bob



More information about the erlang-questions mailing list