2012-07-18 92 views
1

我尝试使用Mochiweb制作彗星服务器,如thereErlang路由器出错

如果我是从erlang shell中完成的,那没关系。

但如果尝试启动第一个节点用命令行了Mochiweb:

erl -pa ebin edit deps/*/ebin -boot start_sasl -sname n1 -s server +K true -setcookie secret_key -s reloader 

和2一个与路由器:

erl -pa ebin edit deps/*/ebin -boot start_sasl -sname router -setcookie secret_key -eval 'net_adm:ping([email protected]), router:start_link().' 

如果我连从浏览器到了Mochiweb我有这样的错误

=CRASH REPORT==== 18-Jul-2012::19:04:45 === 
crasher: 
initial call: mochiweb_acceptor:init/3 
pid: <0.73.0> 
registered_name: [] 
exception exit: {noproc, 
        {gen_server,call, 
         [undefined,{login,"234567e",<0.73.0>}]}} 
    in function gen_server:call/2 
    in call from server_web:loop/2 
    in call from mochiweb_http:headers/5 
ancestors: [server_web,server_sup,<0.55.0>] 
messages: [] 
links: [<0.57.0>,#Port<0.1406>] 
dictionary: [{mochiweb_request_qs, 
        [{"session_id","234567e"},{"obj_id","page"}]}, 
       {mochiweb_request_path,"/polling"}] 
trap_exit: false 
status: running 
heap_size: 2584 
stack_size: 24 
reductions: 1516 

我认为这个问题是从router.erl这个字符串:

-define(SERVER, global:whereis_name(?MODULE)). 

因为-eval第一部分(net_adm:中国平安(N1 @本地))是没有错误开始,我可以看到N1 @本地节点()。。但是-eval的第二部分(router:start_link())不适用于?MODULE

我该如何解决这个问题?

回答

0

看起来像gen_server它应该是全局注册的当前模块的名称(?MODULE被替换为它)尚未启动。 global:whereis_name(?MODULE)将返回undefined在这种情况下,就像您在日志中看到的那样。

查找应该执行此操作的代码部分(通过在该模块中查找MODULe和/或gen_server:start_link)并确保它在第一个节点上执行。