我正在升级我的rails 2.3.14 / ruby 1.8.7应用到3.1.1/1.9.2,但遇到了麻烦:我有一些
这仅在我的(远程)生产数据库中发生,我的本地开发 db 没有问题。我尝试在我的 database.yml 中设置 "reconnect: true",但导致了一个问题。
(ActiveRecord::StatementInvalid) "Mysql2::Error: MySQL server has gone away"
错误出现得很零散。重要的是要明确,在2.3.14版本和完全相同的数据库上,我从未遇到过“mysql”宝石的这种问题(因此错误不应该来自mysql(v5.5.10))。
例如:
$ rails c production
Loading production environment (Rails 3.1.1)
ruby-1.9.2-p290 :001 > ActiveRecord::Base.connection.active?
=> false
ruby-1.9.2-p290 :002 > exit
$ rails c production
Loading production environment (Rails 3.1.1)
ruby-1.9.2-p290 :001 > ActiveRecord::Base.connection.active?
=> true
这仅在我的(远程)生产数据库中发生,我的本地开发 db 没有问题。我尝试在我的 database.yml 中设置 "reconnect: true",但导致了一个问题。
Mysql2::Error: Host '****' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts':...
我尝试使用一个小的rb脚本仅加载mysql2和activerecord来隔离问题,但我没有成功复现这个bug(因此可能与rails堆栈有关)。
由于编码问题,我无法从'mysql2'退回到'mysql' gem(http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/),因此,我不得不将我的生产环境回滚到我的rails 2.3.14应用程序,这让我非常沮丧...
你看我能做些什么来调试这个问题吗?我甚至找不到一个确定的方法来复现这个错误...有人遇到过同样的bug吗?
我只发现很少有人提到这个bug(例如:https://github.com/brianmario/mysql2/issues/213),但没有解决方案。
谢谢你的帮助。
mysql2 0.3.16
和activerecord 4.0.0/4.1.4
进行测试,wait_timeout
是有效的,但在实际的Rails应用中,我遇到了失去连接甚至内存不足的问题。 - Paul