题
当我的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”)的详细信息。
不隶属于 StackOverflow