MySQLPlus比Ruby MySQL适配器更好吗?

3
我想知道 mysqlplus gem 是否比常见的 Ruby mysql gem 更好的数据库驱动程序?我在我的Rails应用中遇到了一些问题,例如: ActiveRecord::StatementInvalid: Mysql::Error: MySQL服务器已关闭

这似乎是两个问题:mysqlplus gem是否比标准更好?以及为什么我会收到x个错误? - Mike Buckbee
也许错误是因为标准 gem 在并发查询方面表现不佳,但这只是一个细节,我真的想知道哪个适配器更好(根据您的经验)=] - Lucas Renan
此外,如果这个错误出现在 Rails 的 console 中,通常 reload! 命令可以解决。 - ma11hew28
3个回答

1

DataObjects(由DataMapper ORM使用)也是一个选择,它的显著目标是在数据库和Ruby实现之间提供一致的API。它的MySQL驱动程序也是异步的,并且据说比mysqlplus更好。我认为另一个好处是它与DataMapper集成,并且具有良好的测试套件和活跃的社区。 - deepak

1

我的服务器上的max_allowed_packet值为16MB,我猜测我没有大而复杂的查询。 - Lucas Renan

0

mysql会在一段时间的不活动后断开连接。这是在'wait_timeout'中定义的。
可以在mysql中看到如下信息:
mysql> show variables like 'wait_timeout'

默认情况下,该时间为8小时。如果您建立了连接,并且在此期间没有执行任何查询,则会出现此错误。

对于此用例,ActiveRecord有ActiveRecord :: Base#verify_active_connections!。如果您在database.yml中指定reconnect:true,它将自动执行此操作。

当我们从连接池中检出连接时,将执行上述方法,以防止不活动状态。

如果您运行长时间运行的查询并超过了wait_timeout期限,则无法帮助您。然后,您可能需要增加mysql中的超时变量。您还可以尝试在以下位置设置补丁: http://gist.github.com/238999 在这种错误情况下重试查询,情况可能已经改变,但补丁不够健壮,因为它没有重试计数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接