我在Goliath(eventmachine)下使用em_
mysql2的activerecord.最奇怪的事情发生在我的用户模型上.当我第一次对/ users进行POST时,它只能按预期找到.当我做第二次POST时,我收到错误.
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数据库发送请求以获取用户身份验证信息.
我的解决方案
事实证明,这个错误发生的唯一时间是来自Mongo的响应在MySQL的响应之前回来,这导致MySQL响应被不同的光纤接收而不是发出请求的光纤.由于我使用的MySQL2光纤实现使用光纤的objectID来管理连接,这似乎导致了这个问题.
ActiveRecord中的整体连接池MySql2 Fibers Goliath不是完全支持的配置. (从那时起可能会有一些进展)