我在Goliath(eventmachine)下使用active_record與em_mysql2。我的用戶模型中最奇怪的事情正在發生。當我第一次對/用戶進行POST時,它只能按預期發揮作用。當我做第二次POST時,我得到一個錯誤。如何解決'連接仍然等待結果'與em_mysql2錯誤
Mysql2::Error: This connection is still waiting for a result, try again once you have the result: INSERT INTO `users` (... and so on ...)
這不會發生在我的任何其他型號或路線上。我會假設,如果數據庫連接處於混亂狀態,我會看到其他請求相同的錯誤,但沒有 - 所有其他的數據庫更新和GET請求似乎工作得很好。
有誰知道這是怎麼發生的,這隻會發生在我的用戶模型中,並且只發生在User.save動作上?活動記錄是否以某種方式存儲了用於做Model.save的數據庫連接並重新使用它?
編輯:
不知何故,我沒有提到,當我寫了這個問題,我用的ActiveRecord作爲ORM。我也沒有提及我異步地向Mongo數據庫發送請求來獲取用戶認證信息。
我的解決辦法:
事實證明,唯一一次從蒙戈響應來自MySQL的響應,這就造成了MySQL響應由不同拾起之前回到這個錯誤會發生很光纖比發出請求的光纖要好。由於我使用的MySQL2光纖實現使用光纖的對象ID來管理連接,這似乎導致了這個問題。
ActiveRecord + MySql2 + Fibers + Goliath中的整體連接池不是完全受支持的配置。 (雖然自那時以來可能會有一些進展)
謝謝!通常這是對這個問題的合理回答。不幸的是,自從我轉移到另一個項目以來,我無法在此時驗證它的正確性。如果其他人可以驗證,我很樂意接受答案。哦!你在使用ActiveRecord嗎? – radixhound 2011-11-15 22:06:32
不,不使用ActiveRecord,但是續集。那裏的故事很相似,所以我懷疑解決方案是一樣的。 – roidrage 2011-11-16 16:30:13
@radixhound如果使用ActiveRecord,將會如何解決它 – Anand 2011-12-12 10:57:56