Domanda

Quando inizio una funzione all'interno del guscio Erl, funziona benissimo. Quando provo a richiamare la stessa funzione con Erl ... la funzione del modulo -s, fallisce.

La riga di codice che alla fine non è:

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

Sono positivo che porta sia impostata correttamente. Il mio messaggio di errore è:

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

ho provato il debugger e mi permette di passo attraverso fino a quando sopra è dato la riga di codice. Dopo Passo che, mi dà questo rapporto incidente.

Ogni aiuto è molto apprezzato.

È stato utile?

Soluzione

Hm, credo che dovrebbe funzionare. Sono tutti i moduli compilati con la stessa versione del compilatore? IIRC ci potrebbero essere errori strani sul livello di socket in caso contrario. A proposito, si potrebbe chiamare la funzione di punto di ingresso iniziare, che è l'impostazione predefinita per -s.

Altri suggerimenti

In alternativa si può provare l'opzione -eval:

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

quando si utilizza -s, gli argomenti vengono raccolti in un elenco, in modo che il porto sarebbe in realtà essere racchiuso in un elenco. è possibile controllare entrambi i casi (elenco o int) con una funzione wrapper (come start([Port])).

Quando si utilizza -s per eseguire le funzioni di Erlang, gli argomenti vengono messi in una lista di atomi di . Quando si utilizza run per eseguire le funzioni di Erlang, gli argomenti vengono messi in una lista di stringhe .

Se avete bisogno di un numero intero valore da trasmettere, è necessario effettuare le conversioni appropriate. Se si vuole coprire tutti i casi, qualcosa di simile potrebbe aiutare:

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

Consultate la pagina man di Erl ( "Erl -man Erl") per i dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top