Frage

Wenn ich eine Funktion innerhalb des erl Shell starten, es funktioniert gut. Wenn ich versuche, die gleiche Funktion mit erl aufzurufen ... -s Modulfunktion, versagt es.

Die Codezeile, die schließlich versagt ist:

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

Ich bin sicher, dass Port richtig eingestellt ist. Meine Fehlermeldung lautet:

=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:

habe ich versucht, den Debugger und es lässt mich Schritt für Schritt durch rechts, bis die Codezeile oben gegeben ist. Nachdem ich das passieren, es gibt mir diesen Crash-Bericht.

Jede Hilfe sehr geschätzt.

War es hilfreich?

Lösung

Hm, ich denke, dass sollte funktionieren. Sind alle Module mit dem gleichen Compiler-Version kompiliert? IIRC es könnte seltsamen Fehler auf der Socket-Ebene sein, wenn es nicht. BTW, können Sie Ihre Eintrittspunktfunktion Start aufrufen, die der Standard für -s ist.

Andere Tipps

Alternativ können Sie die Option -eval versuchen:

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

, wenn es verwendet, werden die Argumente in eine Liste gesammelt, so dass der Anschluss tatsächlich in einer Liste eingeschlossen werden würde. Sie können beide Fälle überprüfen (Liste oder int) mit einem Wrapper-Funktion (wie start([Port])).

Wenn Sie sie verwenden Erlang Funktionen ausführen kann, werden die Argumente in eine Liste setzen von Atom . Wenn Sie -run verwenden Erlang Funktionen ausführen können, werden die Argumente in eine Liste setzen von Strings .

Wenn Sie einen müssen integer Wert auf weitergeben, müssen Sie die richtigen Conversions zu tun. Wenn Sie alle Fälle abdecken wollen, wie etwas, das könnte helfen:

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}]).

Lesen Sie die man-Seite für erl ( "erl -man erl") für Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top