Gwy*_*fey 38 mysql ruby-on-rails
在我们的Ruby on Rails应用程序运行了一段时间后,它开始抛出500秒,"MySQL服务器已经消失".这通常是一夜之间发生 它最近开始这样做,我们的服务器配置没有明显的变化.
Mysql::Error: MySQL server has gone away: SELECT * FROM `widgets`
Run Code Online (Sandbox Code Playgroud)
重新启动mongrels(不是MySQL服务器)修复它.
我们该如何解决这个问题?
mix*_*nic 61
Ruby on Rails 2.3为您的数据库连接提供了一个重新连接选项:
production:
# Your settings
reconnect: true
Run Code Online (Sandbox Code Playgroud)
看到:
祝好运!
Lau*_*ung 22
这可能是由于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
Run Code Online (Sandbox Code Playgroud)
该方法verify_active_connections!
执行多个操作,其中一个操作是重新创建任何过期的连接.
导致此错误的最可能原因是,这是因为猴子补丁重新定义了调度程序不能调用verify_active_connections!
,或者verify_active_connections!
已更改等.
我在向 MySQL 发送非常大的语句时遇到了这个问题。MySQL 限制语句的大小,如果超过限制将关闭连接。
set global max_allowed_packet = 1048576; # 2^20 bytes (1 MB) was enough in my case
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32829 次 |
最近记录: |