Ruby Alpine容器升级OpenSSL3后,ActiveStorage+谷歌存储SSL错误求助
修复OpenSSL 3升级引发的
SSL_read: unexpected eof while reading错误(无需修改全局SSLContext) 核心修复方案(针对ActiveStorage+谷歌存储场景)
1. 升级相关依赖版本
- 将
activestoragegem升级到Rails 7.0及以上版本,这类版本已针对OpenSSL 3做了兼容优化 - 更新
google-cloud-storagegem到最新稳定版,新版本修复了与OpenSSL 3的连接关闭逻辑兼容问题
2. 单独配置谷歌存储客户端的SSL选项
在config/storage.yml中为谷歌存储添加客户端级别的SSL配置,仅影响该服务,不会修改全局默认参数:
google: service: GCS project: <%= ENV["GOOGLE_CLOUD_PROJECT"] %> credentials: <%= ENV["GOOGLE_CLOUD_KEYFILE"] %> bucket: <%= ENV["GOOGLE_CLOUD_STORAGE_BUCKET"] %> client_options: ssl: options: <%= OpenSSL::SSL::OP_IGNORE_UNEXPECTED_EOF %>
3. 修复自定义社交验证器的问题
针对已发现的社交验证器授权问题:
- 检查OAuth请求的连接关闭逻辑,确保请求完成后正确关闭SSL连接,避免提前触发EOF
- 升级
omniauth等相关OAuth依赖到适配OpenSSL 3的版本
辅助排查与验证步骤
- 开启详细SSL日志:给容器启动命令添加环境变量
OPENSSL_DEBUG_LEVEL=3,可捕捉SSL握手和连接关闭的完整过程,便于定位根因 - 绕开Active Storage直接测试:使用
google-cloud-storagegem单独执行文件上传/下载操作,确认是否为Active Storage封装层的问题 - 检查容器CA证书:Alpine镜像升级后可能需要重新安装证书包,执行
apk add --no-cache ca-certificates确保证书完整
内容的提问来源于stack exchange,提问作者bpieck
相关产品推荐
相关产品推荐

