Question

Quand je commence une fonction dans la coquille de ERL, il fonctionne très bien. Lorsque je tente d'invoquer la même fonction avec ERL ... fonction du module -s, il échoue.

La ligne de code qui échoue finalement est:

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

Je suis positif que le port est correctement réglé. Mon message d'erreur est:

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

J'ai essayé le débogueur et il me permet de parcourir jusqu'à la ligne de code ci-dessus est donnée. Après ma, il me donne ce rapport d'accident.

Toute aide est grandement appréciée.

Était-ce utile?

La solution

Hm, je pense que cela devrait fonctionner. Sont tous les modules compilés avec la même version du compilateur? IIRC il pourrait y avoir des erreurs étranges au niveau de la prise en cas. BTW, vous pouvez appeler votre fonction de point d'entrée départ qui est la valeur par défaut -s.

Autres conseils

Sinon, vous pouvez essayer l'option -eval:

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

lorsque vous utilisez -s, les arguments sont rassemblés dans une liste, le port serait effectivement enfermé dans une liste. vous pouvez vérifier les deux cas (liste ou int) avec une fonction d'emballage (comme start([Port])).

Lorsque vous utilisez -s pour exécuter des fonctions Erlang, les arguments sont mis dans une liste de atomes . Lorsque vous utilisez -run pour exécuter des fonctions Erlang, les arguments sont mis dans une liste de chaînes .

Si vous avez besoin d'un entier valeur à transmettre, vous devrez faire les conversions appropriées. Si vous voulez couvrir tous les cas, quelque chose comme cela pourrait aider:

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

Consultez la page de manuel pour ERL ( "ERL -man ERL") pour plus de détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top