Как получить больше информации об ошибке при запуске 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.