Как получить больше информации об ошибке при запуске Inets httpd?

Я начал Инетс http с:

> inets:start(httpd, [{port, 8060}, {server_name, "myserver"},
> {server_root, "/Users/jonas/code"},                         
> {document_root, "/Users/jonas/code/mydocs"},             
> {bind_address, {192, 168, 2, 5}}]).                         
{error,inets_not_started}

поэтому единственная информация об ошибке у меня есть {error,inets_not_started}, Могу ли я получить больше информации о том, что пошло не так?

3 ответа

Решение

Во-первых, чтобы решить вашу проблему, просто запустите приложение inets (причина ошибки указывает, что оно не запущено):

inets:start().

Во-вторых, в общем случае запуск приложения SASL улучшает читаемость ошибок / сбоев Erlang/OTP, но здесь это не так.

Вам нужно позвонить inets:start/0 первый. Смотрите документацию inets для более подробной информации.

Это отличный вопрос из-за досадной перегрузки inets:start/[0,1,2,3] функция и httpcдокументации не очень ясно, что запуск inets автоматически запустит httpc сервис тоже.

Особенно, когда on просто переходит в раздел HTTP CLIENT SERVICE START/STOP, чтобы быстро начать работу, при этом отсутствует примечание в описании модуля.

  • inets:start/[0,1] начинает inetsсамо приложение иhttpc сервис с профилем по умолчанию под названием default (это задокументировано только в httpc).

  • inets:start/[2,3] (который следует называть start_service) запускает одну из служб, которая может работать поверх inets (а именно. ftpc, tftp, httpc, httpd) когда-то inetsприложение уже запущено.

start() ->
start(Type) -> ok | {error, Reason}

Запускает приложение Inets.

start(Service, ServiceConfig) -> {ok, Pid} | {error, Reason}
start(Service, ServiceConfig, How) -> {ok, Pid} | {error, Reason}

Динамически запускает службу Inets после запуска приложения Inets
    (с inets:start/[0,1]).


Примечание относительно httpc

С вершины httpcдокументация модуля:

При запуске приложения Inets запускается процесс менеджера для профиля по умолчанию. Функции в этом API, которые явно не используют профиль, получают доступ к профилю по умолчанию.

Это httpc служба автоматически запустится с использованием профиля по умолчанию, который называется default.

1> inets:start().
ok
2> httpc:get_options(all, default).
{ok,[{proxy,{undefined,[]}},
     {https_proxy,{undefined,[]}},
     {pipeline_timeout,0},
     {max_pipeline_length,2},
     {max_keep_alive_length,5},
     {keep_alive_timeout,120000},
     {max_sessions,2},
     {cookies,disabled},
     {verbose,false},
     {ipfamily,inet},
     {ip,default},
     {port,default},
     {socket_opts,[]},
     {unix_socket,undefined}]}
3>
3> inets:start(httpc, [{profile, lofa}]).
{ok,<0.95.0>}
4>
5> httpc:get_options(all, default).
{ok,[...]}
6> httpc:get_options(all, lofa).
{ok,[...]}

Интересно, что при использовании несуществующего профиля сообщение об ошибке inets_not_started:

7> httpc:get_options(all, balabab).
{error,inets_not_started}

start(Service, ServiceConfig, How) -> {ok, Pid} | {ошибка, причина}

Dynamically starts an inets service after the inets application has been started. 

Поэтому вам нужно сначала вызвать эту функцию.

start () -> start (Type) -> ok | {ошибка, причина}

Типы: Тип = постоянный | переходный процесс | временный

 Starts the Inets application.
Другие вопросы по тегам