Nachdem ich this article gesehen habe, habe ich mit mochiweb getüftelt. Beim Versuch zu replizieren, was in dem Artikel getan wird - im Grunde ein Mochiweb-Server einrichten, mit zwei Erlang-Knoten, und dann eine Funktion in einem Knoten in der anderen (nach dem Festlegen von net_adm: ping() zwischen den beiden Knoten, so dass sie beide wissen andere).Ausnahmefehler: undefined Funktion in Mochiweb/Erlang
Ich konnte alles bis zu diesem Funktionsaufruf Teil folgen. In n1 @ localhost, der der mochiweb Server ist, nenne ich (so wie in dem Artikel gemacht):
router:login(IdInt, self()).
Und dann, in n2 @ localhost, der das router.erl Skript ist, habe ich die Login definiert Funktion:
login(Id, Pid) when is_pid(Pid) ->
gen_server:call(?SERVER, {login, Id, Pid}).
handle_call({login, Id, Pid}, _From, State) when is_pid(Pid) ->
ets:insert(State#state.pid2id, {Pid, Id}),
ets:insert(State#state.id2pid, {Id, Pid}),
link(Pid), % tell us if they exit, so we can log them out
io:format("~w logged in as ~w\n",[Pid, Id]),
{reply, ok, State};
ich nur die relevanten Teile des Codes eingefügt haben. Allerdings, wenn ich jetzt den Webserver auf dem Browser zugreifen - Ich erhalte diese Fehlermeldung auf n1 @ localhost:
=CRASH REPORT==== 11-Jun-2009::12:39:49 ===
crasher:
initial call: mochiweb_socket_server:acceptor_loop/1
pid: <0.62.0>
registered_name: []
exception error: undefined function router:login/2
in function mochiconntest_web:loop/2
in call from mochiweb_http:headers/5
ancestors: [mochiconntest_web,mochiconntest_sup,<0.59.0>]
messages: []
links: [<0.61.0>,#Port<0.897>]
dictionary: [{mochiweb_request_path,"/test/123"}]
trap_exit: false
status: running
heap_size: 1597
stack_size: 24
reductions: 1551
neighbours:
=ERROR REPORT==== 11-Jun-2009::12:39:49 ===
{mochiweb_socket_server,235,{child_error,undef}}
Nach googeln um, bekam ich einen grundlegenden Kern von dem, was der Fehler ist versucht zu sagen - im Grunde ist es sagt dass die Login-Funktion, die in n1 @ localhost aufgerufen wird, nicht definiert ist - aber sie ist in n2 @ localhost definiert (und beide Knoten kennen sich gegenseitig - ich habe nodes().
überprüft) !! Bitte sag mir, wo ich falsch liege!
ändern Bedeutet das, ich muss nur die oben genannten zwei Zeilen in der Mochiweb/Erl-Skript (und die Deklaration -export ([Login/2])). Wenn ich das tue, bekomme ich "undefined Makro '' SERVER ''" Fehler. Wenn ich "% -behaviour (gen_server)." Verwende, dann muss ich die Standardfunktionen übersteuern. – thomas55
Oder fehlt mir noch etwas offensichtliches? Muss ich die Datei router.erl im selben Ordner wie das mochiweb-Skript speichern? Currenly, ich mache das nicht ... – thomas55
Ich bearbeite meine ursprüngliche Antwort .... –