2009-08-05 4 views
3

Suite à mes aventures avec Erlang et ErlyDB. J'essaie de faire fonctionner ErlyDB avec BeepBeepNuméro d'intégration BeepBeep et ErlyDB

Mon installation ErlyDB fonctionne correctement lorsqu'elle est exécutée en dehors de l'environnement BeepBeep (voir Debugging ErlyDB and MySQL). J'ai essentiellement pris le code de travail et essayé de le faire fonctionner dans BeepBeep.

J'ai le code suivant dans mon contrôleur:

handle_request("index",[]) -> 
    erlydb:start(mysql,Database), 
    erlydb:code_gen(["thing.erl"],mysql), 
    NewThing = thing:new_with([{name, "name"},{value, "value"}]), 
    thing:save(NewThing), 
    {render,"home/index.html",[{data,"Hello World!"}]}; 

Quand j'appelle l'URL, les sorties de réponse "Server Error". Aucune autre erreur ou exception n'a été signalée.

J'ai essayé d'encapsuler l'appel dans try/catch pour voir s'il y a une erreur sous-jacente - il y a certainement une exception à l'appel à chose: new_with(), mais aucune autre information n'est disponible.

Les rapports STACKTRACE:

{thing,new,[["name","value"]]} 
{home_controller,create,1} 
{home_controller,handle_request,3} 
{beepbeep,process_request,4} 
{test_web,loop,1} 
{mochiweb_http,headers,4} 
{proc_lib,init_p_do_apply,3} 
+0

Le bit qui me laisse vraiment perplexe est que je peux prendre le code ErlyDB d'un module Erlang qui fonctionne, et au moment où je l'ai mis dans le contrôleur, l'erreur du serveur apparaît. –

Répondre

2

Mode d'utilisation correspondant à affirmer que les choses fonctionnent à l'appel à la chose: new/1:

ok = erlydb:start(mysql,Database), 
ok = erlydb:code_gen(["thing.erl"],mysql), 

Vous ne comprennent que la trace de la pile, regardez le message d'exception aussi. Je soupçonne que l'erreur est que vous obtenez une exception «undef». Mais vérifiez qu'il en est ainsi. La première ligne de la trace de la pile indique qu'il y a un problème avec l'appel de chose: new/1 avec ["nom", "valeur"] comme argument.

Il est légèrement étrange que vous montriez une clause de handle_request qui n'appelle pas home_controller: create/1 selon {home_controller,create,1} dans la pile-trace. À quoi ressemblent les autres clauses de votre fonction handle_request/2?

+0

Merci pour le conseil. L'utilisation des modèles comme ci-dessus fonctionne bien. L'un des problèmes semble être que l'exception est simplement avalée par le serveur ... Le navigateur signale une erreur du serveur, mais la ligne de commande du serveur n'affiche aucune sortie. Rend les choses un peu compliquées à déboguer. –

+0

Pourquoi ne pas utiliser dbg avec la valeur de retour et la trace d'événement de processus? – Zed

+0

Qu'est-ce que dbg? Je suis assez nouveau à Erlang. –