В настоящее время я разрабатываю сервер на Erlang, используя Cowboy в качестве основы веб-сервера. При запуске мне нужно иметь возможность выполнять HTTP-вызовы на стороне сервера для получения файлов с других веб-серверов, поэтому я включил зависимость Makefile в ibrowse
В документации ibrowse ничего конкретно не говорится о добавлении в качестве зависимости Cowboy, но в документации erlang.mk указано, что мне нужно добавить только одну строку
DEPS = ibrowse
Однако, как только я добавляю эту строку, Cowboy вылетает при запуске с
=INFO REPORT==== 15-Feb-2018::14:51:13 ===
application: geo_server
exited: {bad_return,
{{geo_server_app,start,[normal,[]]},
{'EXIT',
{undef,
[{cowboy_router,compile,
[[{'_',
[{"/",default_handler,[]},
{"/client_info",client_info_handler,[]},
{"/search",request_handler,[]}]}]],
[]},
{geo_server_app,start,2,
[{file,"src/geo_server_app.erl"},{line,8}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},
{line,273}]}]}}}}
type: permanent
{"Kernel pid terminated",application_controller,"{application_start_failure,geo_server,{bad_return,{{geo_server_app,start,[normal,[]]},{'EXIT',{undef,[{cowboy_router,compile,[[{'_',[{\"/\",default_handler,[]},{\"/client_info\",client_info_handler,[]},{\"/search\",request_handler,[]}]}]],[]},{geo_server_app,start,2,[{file,\"src/geo_server_app.erl\"},{line,8}]},{application_master,start_it_old,4,[{file,\"application_master.erl\"},{line,273}]}]}}}}}"}
Kernel pid terminated (application_controller) ({application_start_failure,geo_server,{bad_return,{{geo_server_app,start,[normal,[]]},{'EXIT',{undef,[{cowboy_router,compile,[[{'_',[{"/",default_handle
heart: Thu Feb 15 14:51:14 2018: Erlang is crashing .. (waiting for crash dump file)
heart: Thu Feb 15 14:51:14 2018: Would reboot. Terminating.
gmake: *** [erlang.mk:6639: run] Error 1
Уберите эту зависимость, и Cowboy запустится нормально.
PROJECT = geo_server
PROJECT_DESCRIPTION = Geographic information server
PROJECT_VERSION = 0.1.0
DEPS = cowboy
dep_cowboy_commit = 2.2.2
DEP_PLUGINS = cowboy
include erlang.mk
DEPS = ibrowse
Также не имеет значения, ставлю ли я DEPS = ibrowse
до или после строки include elrang.mk
.
Еще немного поболтав, это похоже на проблему кэширования в том, как работает процесс Cowboy make run
.
Добавление ibrowse требует двух вызовов make run
. Если мой код затем выйдет из строя, мне придется добавить, а затем снова удалить ibrowse, прежде чем я смогу увидеть, как работает мой исправленный код.
Спасибо
Крис В.