Rails 5.1.7中cache fetch方法报错:参数数量不匹配
Rails.cache.fetch 调用触发参数数量错误的解决办法
执行以下Rails缓存代码:
Rails.cache.fetch('some_other_key', expires_in: 24.hours) { 50 + 50 }
出现错误:
ArgumentError (wrong number of arguments (given 1, expected 2))
环境信息
- Rails版本:
Rails 5.1.7 - 缓存配置:
config.cache_store = :memory_store,切换为redis store后错误依然存在
错误根源分析
从完整调用栈可追踪到,错误并非来自Rails缓存本身,而是meta_request gem(版本0.8.2)的兼容性问题:
在meta_request/event.rb的sanitize_hash方法中,调用Rails的normalize_key方法时只传入了1个参数,但该方法需要2个参数,从而触发参数数量不匹配的错误。
解决方案
- 升级meta_request gem
旧版本的meta_request与Rails 5.1.x存在适配问题,更新到兼容版本即可解决。执行命令:bundle update meta_request - 临时禁用meta_request
如果暂时无法升级,可在开发环境中临时注释掉该gem:
修改Gemfile:
执行group :development do # gem 'meta_request' # 其他开发环境依赖... endbundle install后重启服务器。
内容的提问来源于stack exchange,提问作者Prathibha G Sampath
相关产品推荐
相关产品推荐

