Rails 6模型使用ActiveSupport::Cache::FileStore报NameError如何解决
问题解决方法
错误根源
- 类名拼写错误:你使用的
ActiveSupport::Cache::FileCache是不存在的类,Rails ActiveSupport提供的文件缓存实现类正确名称是ActiveSupport::Cache::FileStore - 依赖引入不完整:你当前仅引入了核心扩展模块,未引入缓存相关的核心模块
正确实现步骤
- 补充正确的依赖引入(仅非Rails上下文单独使用时需要,Rails项目默认已经预加载了缓存模块,可以跳过这一步):
require "active_support" require "active_support/cache"
- 初始化独立隔离的文件缓存实例,缓存路径请使用和默认Rails缓存不一样的目录,保证物理隔离:
# 路径自定义,不要用默认的tmp/cache,避免和Rails默认缓存混淆 @backend_cache = ActiveSupport::Cache::FileStore.new( Rails.root.join("tmp", "custom_backend_cache") )
你也可以在初始化时传入全局配置参数,比如默认过期时间、缓存前缀等:
@backend_cache = ActiveSupport::Cache::FileStore.new( Rails.root.join("tmp", "custom_backend_cache"), expires_in: 24.hours, # 全局默认过期时间 namespace: "backend_service" # 缓存key统一前缀 )
推荐项目级用法
如果需要在整个Rails项目中复用这个独立缓存,可以在初始化器中注册为全局常量:
新建config/initializers/custom_backend_cache.rb,写入以下内容:
Rails.application.config.after_initialize do BACKEND_CACHE = ActiveSupport::Cache::FileStore.new( Rails.root.join("tmp", "custom_backend_cache"), expires_in: 7.days ) end
之后在模型、控制器等任意位置直接调用BACKEND_CACHE.read/BACKEND_CACHE.write等方法即可,所有缓存数据都会单独存储在指定目录,完全和Rails默认缓存隔离。
内容的提问来源于stack exchange,提问作者cuteCAT
相关产品推荐
相关产品推荐

