提问人:Mohsin Sethi 提问时间:8/28/2023 最后编辑:Holger JustMohsin Sethi 更新时间:8/29/2023 访问量:96
Ruby on Rails - Mysql2::Error:由于不活动,客户端被服务器断开连接
Ruby on Rails - Mysql2::Error: The client was disconnected by the server because of inactivity
问:
我已经将我的 Ruby on Rails 项目 Ruby 版本从 2.5.8 升级到 3.0.6。我的 Ruby on Rails 版本是 6.1.7.6。在我升级了 Ruby 版本后,现在我在使用 Rails 控制台时遇到了很多以下错误。Ruby v2.5.8 并非如此。使用该应用程序时似乎不会发生这种情况,但仅从控制台发生。
/usr/local/bundle/gems/mysql2-0.5.5/lib/mysql2/client.rb:151:in `_query': Mysql2::Error: The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior. (ActiveRecord::StatementInvalid)
/usr/local/bundle/gems/mysql2-0.5.5/lib/mysql2/client.rb:151:in `_query': The client was disconnected by the server because of inactivity. See wait_timeout and interactive_timeout for configuring this behavior. (Mysql2::Error)
这是我database.yml
defaults: &defaults
adapter: mysql2
wait_timeout: 30
timeout: 500
reconnect: true
strict: false
host: somehostname
port: someportnumber
username: someusername
password: somepassword
database: somedatabasename
encoding: utf8mb4
collation: utf8mb4_unicode_ci
pool: 13
development:
primary:
<<: *defaults
shard1:
<<: *defaults
database: shard1
shard2:
<<: *defaults
database: shard2
我尝试将mysql2 gem从0.5.5降级到0.5.4,但它没有解决问题。此外,我试图增加database.yml但这似乎也无法解决问题。database.yml中的选项似乎不再起作用。timeout
reconnect
答:
0赞
abdollar
8/29/2023
#1
这是database.yml中 30 秒的wait_timeout设置。wait_timeout是 。默认情况下,mysql2 gem 是一个非交互式客户端(除非您使用 CLIENT_INTERACTIVE 显式构建它)。也许删除该设置,默认的 8 小时似乎是合理的。The number of seconds the server waits for activity on a noninteractive connection before closing it
wait_timeout
评论
0赞
Mohsin Sethi
8/29/2023
但是,我想知道为什么在将 Ruby 版本升级到 3.0.6 后它开始发生。在 v2.5.8 上根本没有发生完全相同的database.yml。
0赞
abdollar
8/31/2023
升级 ruby 可能在某个地方减慢了速度。检查您从 v2 到 v3 的启动时间,如果它在 v3 中较慢,这解释了您为什么看到这个问题,否则我没有一个很好的解释,如果代码完全相同并且只有 ruby 发生了变化,但我怀疑情况是否如此,一定有什么东西发生了变化并减慢了速度。
评论