在我们的Ruby on Rails应用程序运行了一段时间后,它开始抛出500个"MySQL服务器消失了".通常这种情况会在一夜之间发生.它最近开始这样做,我们的服务器配置没有明显变化.
Mysql::Error: MySQL server has gone away: SELECT * FROM `widgets`
重启mongrels(而不是MySQL服务器)可以修复它.
我们怎么解决这个问题?
在我们的Ruby on Rails应用程序运行了一段时间后,它开始抛出500个"MySQL服务器消失了".通常这种情况会在一夜之间发生.它最近开始这样做,我们的服务器配置没有明显变化.
Mysql::Error: MySQL server has gone away: SELECT * FROM `widgets`
重启mongrels(而不是MySQL服务器)可以修复它.
我们怎么解决这个问题?
这可能是由于与MySQL的持久连接消失(如果发生在夜间,则可能会超时),而Ruby on Rails无法恢复连接,默认情况下应该这样做:
在文件vendor/rails/actionpack/lib/action\u controller/dispatcher中.rb是代码:
if defined?(ActiveRecord)
before_dispatch { ActiveRecord::Base.verify_active_connections! }
to_prepare(:activerecord_instantiate_observers) {ActiveRecord::Base.instantiate_observers }
end
方法verify_active_connections!
执行多个动作,其中一个动作是重新创建任何过期的连接.
此错误最可能的原因是,这是因为monkey patch重新定义了调度器,使其不调用verify_active_connections!
,或者verify_active_connections!
已被更改,等等.