2009-08-05 76 views
3

繼續我的Erlang和ErlyDB冒險。我試圖讓ErlyDB與BeepBeepBeepBeep和ErlyDB集成問題

一起工作當在BeepBeep環境之外運行時,我的ErlyDB安裝程序可以正常工作(請參閱Debugging ErlyDB and MySQL)。我已經基本上拿到了工作代碼,並試圖讓它在BeepBeep中運行。

我在我的控制器下面的代碼:

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!"}]}; 

當我打電話的URL,響應輸出「服務器錯誤」。 沒有報告其他錯誤或異常信息。

我試着在try/catch中包裝呼叫以查看是否存在潛在錯誤 - 在致電thing:new_with()時肯定存在異常,但沒有進一步的信息可用。

堆棧跟蹤報告:

{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

這讓我很困惑的一點是,我可以從Erlang模塊中取得ErlyDB代碼,當我把它放入Controller中時,服務器出現錯誤。 – 2009-08-13 07:00:14

回答

2

使用模式匹配斷言事情的工作將電話到一點:新/ 1:

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

你只包括堆棧跟蹤,看看異常消息也是如此。我懷疑這個錯誤是你得到一個'undef'異常。但檢查它是如此。堆棧跟蹤中的第一行表示調用thing:new/1並將[「name」,「value」]作爲參數時出現問題。

顯示handle_request的一個子句並沒有調用home_controller:在堆棧跟蹤中按照{home_controller,create,1}創建/ 1,這有點奇怪。 handle_request/2函數中的其他子句是什麼樣的?

+0

感謝您的建議。使用上述模式很好地工作。 其中一個問題似乎是異常只是被服務器吞下......瀏覽器報告服務器錯誤,但服務器命令行根本沒有顯示任何輸出。使事情調試有點棘手。 – 2009-08-12 03:43:51