当我的ERL外壳内启动一个功能,它工作正常。当我尝试调用与ERL ... -s模块功能相同的功能,它失败。

的代码行,并最终将失败是:

start(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun dispatch_requests/1}]).

我肯定该端口是否正确设置。我的错误信息是:

=CRASH REPORT==== 17-Jan-2010::00:21:09 ===
  crasher:
    initial call: mochiweb_socket_server:acceptor_loop/1
    pid: <0.65.0>
    registered_name: []
    exception exit: {error,closed}
      in function  mochiweb_socket_server:acceptor_loop/1
    ancestors: [mochiweb_http,<0.1.0>]
    messages: []
    links: []
    dictionary: []
    trap_exit: false
    status: running
    heap_size: 377
    stack_size: 24
    reductions: 93
  neighbours:

我试图调试和它让我步权利直到上面给出的代码行。我传递后,它给了我这个崩溃报告。

任何帮助不胜感激。

有帮助吗?

解决方案

嗯,我认为这应该工作。 与相同的编译器版本编译的所有模块? IIRC可能有奇怪的错误的插座水平如果不。 顺便说一句,你可以打电话给你的入口点函数开始这是-s默认的。

其他提示

另外,您可以尝试-eval选项:

erl -eval 'module:start(9090).'

使用-s时,参数被收集到一个列表中,因此端口实际上在一个列表中被封闭。可以用一个包装函数(像start([Port]))检查这两种情况下(列表或INT)。

当您使用-s运行的Erlang函数,自变量被放入的原子的列表。当您使用-run运行Erlang的功能,参数放入列表的字符串

如果你需要一个整数值传递,你需要做适当的转换。如果要覆盖所有的情况下,这样的事情可以帮助:

start([Port]) when is_atom(Port) ->
    start([atom_to_list(Port)]);
start([Port]) when is_list(Port) ->
    start(list_to_integer(Port));
start(Port) when is_integer(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun dispatch_requests/1}]).

请查阅手册页的 ERL ( “ERL -man ERL”)的详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top