You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 6.1从MySQL5.7升级到8.0后,连接仍强制用TLS/SSL求助

问题

现有Rails 6.1应用需从MySQL 5.7升级至8.0,本地开发环境通过brew安装了MySQL 8.0,但Rails连接本地服务器时出现以下错误:

TLS/SSL error: No such file or directory (2) (ActiveRecord::ConnectionNotEstablished)

已在config/database.yml中配置如下内容:

adapter: mysql2
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  encoding: utf8mb4
  ssl_mode: :disabled
  sslverify: false

但应用仍尝试建立TLS/SSL连接。当前使用的Gem版本为rails 6.1.7.6、mysql2 0.5.5,且已通过bundle强制重装所有Gem。

解决方案
  • 修正database.yml配置项:mysql2适配器的ssl_mode需使用字符串而非符号,同时移除无效的sslverify参数(该参数为旧版mysql2适配项,新版已不支持),调整后配置如下:
    adapter: mysql2
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    timeout: 5000
    encoding: utf8mb4
    ssl_mode: "disabled"
    
  • 重新编译mysql2 Gem并关闭SSL支持:brew安装的MySQL 8.0默认启用SSL,重装mysql2时强制关闭SSL编译参数:
    bundle config set mysql2.ssl false
    bundle install --force mysql2
    
  • 检查MySQL本地配置:打开brew安装MySQL的默认配置文件/usr/local/etc/my.cnf,确认是否存在强制SSL的配置项require_secure_transport = ON,若有则改为require_secure_transport = OFF,随后重启MySQL服务:
    brew services restart mysql
    
  • 验证非SSL连接可用性:用MySQL客户端直接测试非SSL连接,确认服务端允许该模式:
    mysql -u 你的用户名 -p --ssl-mode=DISABLED
    
    若能正常连接,重启Rails应用即可完成测试。

内容的提问来源于stack exchange,提问作者user976560

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:42:39