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

Ruby Redis gem为何在错误消息中返回整数?技术问询

问题分析与解决

为什么Redis会返回整数作为错误消息?

这个整数20325是系统错误码(errno),并非Redis服务直接返回的错误信息。Ruby的Redis gem在处理底层网络/系统级异常时(比如连接池获取超时、Socket读写错误、系统资源不足等场景),部分分支的错误处理逻辑没有将系统错误码转换为对应的字符串描述,直接把整数形式的错误码赋值给了异常对象的message属性,导致你拿到的error.message是整数而非字符串。

你的代码报错的直接原因

看你日志行的写法:

Rails.logger.error([error.message] + error.backtrace).join($/)

这行代码的执行顺序是:先调用Rails.logger.error传入数组,然后对logger.error的返回值调用join。而Rails.logger.error在接收非字符串参数时,内部处理可能返回了error.message对应的整数20325,此时对整数调用join方法就触发了NoMethodError。

修复方案

正确的写法是先把异常信息拼接成字符串,再传给日志方法:

class CacheManager
  def self.get(k, default_value = nil)
    begin
      $redis_pool.with { |conn| conn.get(k) } || default_value
    rescue => error
      error_details = [error.message.to_s] + error.backtrace
      Rails.logger.error(error_details.join($/))
      default_value
    end
  end
end

这里做了两个关键调整:

  • 先将error.message转为字符串,避免数组中混入整数类型
  • 先完成数组的join操作得到完整错误字符串,再传给Rails.logger.error

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:43:27