我創建了一個記錄模塊,其將消息記錄到一個MySQL數據庫,當前的代碼位於: https://github.com/amiadogroup/mod_log_chat_mysql5/blob/master/src/mod_log_chat_mysql5.erlEjabberd模塊與子進程
與當前代碼的問題是,有時該連接被關閉,如結果,模塊不再工作。 正如你在代碼中看到的那樣,我將DBRef存儲在ets表中,這不是真正的好方法。
我向erlang郵件列表詢問了這個問題,他們建議我將DB Connection作爲模塊自己的子進程。這將使模塊在關閉連接時正常重啓連接。
現在我的問題是:我如何用gen_server和/或gen_mod實現這個子進程?
我是否需要創建兩個文件,或者我可以在同一個文件中完成嗎?
有沒有什麼地方可以實現這個目標的例子?
編輯:正如你可以看到在鏈接的github回購,我更新了代碼,它現在的作品,weeha! 看着mod_Archive代碼幫了我很多,雖然我沒有決定升級我的ejabberd版本。
我遇到了另一個,但現在相關的問題。在代碼中,您會看到我使用「SET NAMES UTF8」執行初始查詢以防止消息被篡改。看來,如果gen_server重新連接,這不會再次完成。有沒有我可以調用重新連接的鉤子,以便UTF8查詢每次完成?
編輯#2: 現在我切換到Emysql(https://github.com/Eonblast/Emysql),它通過直接在連接指定編碼開箱的。代碼在github上。
感謝您的幫助, 邁克爾
感謝您的回答。用gen_server我會啓動數據庫連接?我怎樣才能獲得數據庫引用? –
編輯答案包括一點關於MySQL,希望它有幫助 –
謝謝Nuno。 關於erlang_odbc:這裏的問題是,我在服務器端使用apt的ejabberd deb來使用Debian。據我所知,deb並沒有在其中編譯odbc支持。 你知道我是否自己編譯MySQL模塊,我還可以使用erlang_odbc模塊嗎?我從來沒有嘗試過,但我不認爲它的作用:( –