在我们的Ruby on Rails应用程序运行了一段时间后,它开始抛出500秒,"MySQL服务器已经消失".这通常是一夜之间发生 它最近开始这样做,我们的服务器配置没有明显的变化.
Mysql::Error: MySQL server has gone away: SELECT * FROM `widgets`
重新启动mongrels(不是MySQL服务器)修复它.
我们该如何解决这个问题?
Ruby on Rails 2.3为您的数据库连接提供了一个重新连接选项:
production: # Your settings reconnect: true
看到:
Ruby on Rails 2.3发行说明,子部分4.8重新连接MySQL连接.
重新访问MySQL自动重新连接
祝好运!
这可能是由于MySQL的持久连接消失(如果它发生在一夜之间可能会超时),并且Ruby on Rails无法恢复连接,默认情况下应该这样做:
在文件vendor/rails/actionpack/lib/action_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!
执行多个操作,其中一个操作是重新创建任何过期的连接.
导致此错误的最可能原因是,这是因为猴子补丁重新定义了调度程序不能调用verify_active_connections!
,或者verify_active_connections!
已更改等.
ActiveRecord::Base.connection.verify!
在Ruby on Rails 4中试用。验证ping服务器并在未连接时重新连接。