Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Функциональные языки: общие вопросы > Erlang application init


Автор: Valinur 7.8.2012, 14:53
Привет всем.

Написал небольшое Erlang-приложение. Для работы приложению нужно httpc, поэтому при инициализации я запускаю inets.
Код

init([]) ->
    %% some code 
    %% ...
    inets:start(),
    ssl:start(),
    io:format("~p starting~n", [?SERVER]),
    {ok, Table}.


Я считаю это неверным, и хочу чтобы inets и ssl запускались сами. Для этого прописал их в .app и убрал 2 строчки кода из init
Код

{application, status_server,
    [{description, "HTTP Status Server"},
        {vsn, "0.1"},
        {modules, [status_server_app, status_server_supervisor, status_server]},
        {registered, [status_server, status_server_supervisor]},
        {applications, [kernel, stdlib, inets, ssl]},
        {mod, {status_server_app, []}},
        {start_phases, []}
    ]}.

Код

init([]) ->
    %% some code 
    %% ...
    io:format("~p starting~n", [?SERVER]),
    {ok, Table}.


Но теперь при запуске приложения я получаю ошибку
Код

1> application:load(status_server), application:start(status_server). 
{error,{not_started,inets}}.

В документации по OTP написано, что в части applications прописываются всё, что должно подкгрузиться до старта самого приложения. Почему же я словил эту ошибку? Или я что-то не так делаю?

Автор: Бонифаций 11.8.2012, 16:37
Потому что вы запускаете приложение ручками.

Если вы сделаете релиз, то там будет сгенерирован бут скрипт для запуска вашего приложения, и все dependent приложения будут запускаться автоматически. Если вы просто скомпилировали проект и запускаете его из erl, то забота о том, чтобы все нужные приложения были запущены возлагается на вас самих.

Добавлено через 5 минут и 26 секунд
и, кстати, application:start(status_server) сам, без вас сделает application:load.


Автор: Valinur 16.8.2012, 00:24
Понял, спасибо smile Разобрался)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)