Erlang "Ошибка ядра pid"
Я пытаюсь использовать relx для выпуска приложения. Relx сделал это без проблем. Но когда я запускаю приложение, у меня появляется ошибка:
{"Kernel pid terminated",application_controller,"
{application_start_failure,iqServer,{bad_return,{{iqServer_app,start,[normal,[]]},
{'EXIT',{undef,[{iqServer_app,start,[normal,[]],[]},
{application_master,start_it_old,4,[{file,\"application_master.erl\"},
{line,272}]}]}}}}}"}
Как я понял из ошибки, у меня проблема в функции iqServer:start/2
, start/2
выглядит так:
-module(iqServer).
-behaviour(application).
-export([start/2, stop/1]).
start(_StartType, _StartArgs) ->
Dispatch = dispatch_rules(),
{ok, _} = cowboy:start_http(http_listener, 100, [
{ip,{127,0,0,1}},
{port, 6000}], [
{env, [{dispatch, Dispatch}]}
]),
iqServer_sup:start_link().
stop(_State) ->
ok.
dispatch_rules() ->
cowboy_router:compile([
{'_', [
{"/test/", cowboy_static, {file, "priv/index.html"}},
{"/test/:group/:method", iqServer_test_handler, []}
]}
]).
Ранее я запустил свое приложение с помощью этой команды: erl -pa ebin deps/*/ebin -s iqServer
и это работало нормально. И теперь я не знаю, где проблема.
Это мой файл iqServer.app.src:
{application, iqServer,
[
{description, "Test app"},
{vsn, "0.1"},
{registered, [iqServer]},
{applications, [
kernel,
stdlib,
crypto,
cowlib,
ranch,
gproc,
cowboy
]},
{mod, { iqServer_app, []}},
{modules, [
iqServer,
.....
iqServer_sup,
iqServer_tools
]}
]}.
Makefile:
PROJECT = iqServer
DEPS = cowboy sync gproc jsx epgsql
COMPILE_FIRST = iqServer_api_method
ERLC_OPTS = +debug_info
dep_cowboy = git https://github.com/ninenines/cowboy.git HEAD
dep_gproc = git git://github.com/esl/gproc.git HEAD
dep_jsx = git git://github.com/talentdeficit/jsx.git HEAD
dep_epgsql = git git://github.com/epgsql/epgsql.git HEAD
include erlang.mk
relx.config:
{release, {iqServer, "1"}, [iqServer]}.
{extended_start_script, true}.
{sys_config, "rel/sys.config"}.
{vm_args, "rel/vm.args"}.
1 ответ
Решение
В вашем файле приложения есть эта строка:
{mod, { iqServer_app, []}},
Это означает, что при запуске приложения start/2
функция в iqServer_app
модуль должен быть вызван. Тем не менее, модуль обратного вызова вашего приложения называется iqServer
, Либо измените имя модуля в файле приложения, либо переименуйте модуль.