当我在erl shell中启动一个函数时,它工作正常。当我尝试使用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:
我尝试了调试器,它让我一步一步向上,直到给出上面的代码行。在我通过之后,它给了我这个崩溃报告。
非常感谢任何帮助。
答案 0 :(得分:1)
答案 1 :(得分:1)
或者,您可以尝试-eval
选项:
erl -eval 'module:start(9090).'
答案 2 :(得分:0)
使用-s时,参数会被收集到列表中,因此端口实际上会包含在列表中。您可以使用包装函数(如start([Port])
)检查这两种情况(列表或整数)。
答案 3 :(得分:0)
当您使用-s运行Erlang函数时,参数将放入 atoms 列表中。当您使用-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”)的手册页。