在我们的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!已被更改,等等.

Ruby-on-rails相关问答推荐

如何在rails 7中禁用Simple_Form验证

链轮轨道V4链接到外部Ruby 的 list 文件

如何从 Rails7.2 中的控制器获取名称空间?

删除链接不起作用,重定向 echo 示 Ruby

Rails 7 应用程序 - 引用模型文件时出现未初始化常量错误

如何从设计中删除/禁用注册

如何使用 Vim 插入 ERB 标签?

rails s和bundle exec rails s有什么区别?

Rails:包含多态关联

如何在 Ruby on Rails 中的 cookie 上设置 HttpOnly 标志

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

Rails 3.1 在开发模式下非常慢,因为assets资源 ,怎么办?

如何在 Rails 1.2.3 中使复选框默认为选中?

我如何找出为什么我不能#destroy() 记录?

Rails:使用 gem 卸载特定版本的库

我们如何在 Rails Mailer 中设置邮箱发件人的名称?

加载常量时自动加载常量时检测到循环依赖

submit_tag rails 表单中的 bootstrap 图标

我是否必须手动卸载所有依赖的 gem?

没有UTC的Rails 3默认日期时间格式