从命令行启动erlang应用程序时出现问题
我正在尝试从命令行启动一个应用程序。该应用程序基本上是一个符合OTP的TCP服务器,从shell启动时工作正常。但是,当从命令行启动时,它实际上不会启动 我的所有文件都在一个兼容的文件夹结构中,这意味着\src和binaries\ebin中的源文件。我已在.erlang文件中使用从命令行启动erlang应用程序时出现问题,erlang,otp,Erlang,Otp,我正在尝试从命令行启动一个应用程序。该应用程序基本上是一个符合OTP的TCP服务器,从shell启动时工作正常。但是,当从命令行启动时,它实际上不会启动 我的所有文件都在一个兼容的文件夹结构中,这意味着\src和binaries\ebin中的源文件。我已在.erlang文件中使用 code:add_patha("./ebin"). 正在调用的函数就在这个模块中 -module(wotsuke_geolocation_lookup_server). -behaviour(application)
code:add_patha("./ebin").
正在调用的函数就在这个模块中
-module(wotsuke_geolocation_lookup_server).
-behaviour(application).
-export([start/0, start/2, stop/1]).
start() ->
event_dbs:start(),
wotsuke_server_sup:start_link().
start(_Type, _Args) ->
event_dbs:start(),
wotsuke_server_sup:start_link().
stop(_State) ->
ok.
我还(冗余地)添加了一个start/0(由于将来的功能需要参数,我使用start/2),因为从参数开始从来都不起作用。
现在当我跑步时:
erl -run wotsuke_geolocation_lookup_server start [] []
我明白了
这意味着它找不到模块/函数。因此,我使用了冗余启动/0
erl -run wotsuke_geolocation_lookup_server start
并获得:
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.0 (abort with ^G)
1>
基本上什么都没有启动(没有返回进程ID)。我尝试连接到服务器,并在服务器关闭时获得典型答案。我还尝试使用-pa选项强制erl进入ebin文件夹。同上
这是我第一次尝试从命令行运行erlang应用程序(为了将其妖魔化),我对此一无所知
谢谢你的帮助
添加:不确定是否有帮助,我还添加了erlang应用程序代码
{application, wotsuke_geolocation_lookup_server,
[{description, "Wotsuke Geolocation lookup server"},
{vsn, "0.1.0"},
{modules, [tcpserver_otp_backend, ets_methods, data_packing, data_formats, event_timings, logger, event_dbs,
obsolete_data_clean_ad, obsolete_data_clean, wotsuke_data_input, wotsuke_logger, wotsuke_server_sup, data_retrieve, wotsuke_data_output, user_event_dbs,
event_areas]},
{registered, [wotsuke_data_input, wotsuke_server_sup, wotsuke_logger, wotsuke_data_output]},
{applications, [kernel, stdlib, mnesia]},
{env, []},
{mod, {bsc, []}}]}.
更新:解决了一个问题。命令的问题
erl -run wotsuke_geolocation_lookup_server start [] []
实际上是由于erl希望在指定模块时启动/0,或者如果也指定了函数,则arity 1。使[]被视为[…],[…] 是的,根据run执行的函数应该是arity 1。您可以定义调用start/2的
init([Application,Type])
,然后使用erl-run-wotsuke\u geolocation\u lookup\u server init[][]
显然,我的问题是无法通过命令行作为标准函数启动管理器,而只能使用Application:start。因此,我通过使用应用程序本身并在命令行上执行解决了我的问题
erl (options) eval "application:start(...)"
看起来它正在选择一个参数作为
{init termining in do_boot',{undef,[{wotsuke_geology_lookup_server,start,[[“[]”,“[]”,“[]”,[],[],[]},{init,start_it,1,[]},{init start,start_em,1,[]}}
意味着start/1的未定义是,[]>,实际上是一个参数,算术数必须为1零。但是,我仍然存在这样一个问题:当错误被解决时,服务器实际上并没有启动,而shell却启动了。我真的不明白。
erl (options) eval "application:start(...)"