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连接,确认服务端允许该模式:
若能正常连接,重启Rails应用即可完成测试。mysql -u 你的用户名 -p --ssl-mode=DISABLED
内容的提问来源于stack exchange,提问作者user976560
相关产品推荐
相关产品推荐

