我已经实现了一个围绕Ruby的Redis gem的库 Package 器。
有几次当我调用CacheManager.get(“key”)时,它会以某种方式触发一个错误,这个错误在救援中被捕获。错误看起来像这样:undefined method 'join' for 20325:Integer (NoMethodError)
。明显的解决方法是在error.message上调用.to_s
,但我很想知道发生了什么,为什么Redis返回一个整数作为它的错误消息。
class CacheManager
def self.get(k, default_value = nil)
begin
$redis_pool.with { |conn| conn.get(k) } || default_value
rescue => error
Rails.logger.error([error.message] + error.backtrace).join($/)
default_value
end
end
end
字符串
1条答案
按热度按时间x9ybnkn61#
我假设错误是在这一行提出的:
字符串
这不是Redis或
redis
gem引发的异常,它返回一个整数,导致这一行引发undefined method 'join' for 20325:Integer (NoMethodError)
。它是
Rails.logger.error
返回一个整数,然后对这个整数调用join
。该方法的返回值取决于日志记录器的配置和版本。当重新格式化该行时,该行中的问题变得更加明显:
型
要修复此问题,需要修复圆括号,以确保在要连接的数组上调用
join
,而不是logger调用,如下所示:型
或
型