Erlang VM -s argument de mauvaise conduite
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.
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.