我有下面的使用redis作为rails缓存配置,非常适合rails文档:
Rails.application.configure do
...
config.cache_store = :redis_cache_store, url: "redis://example.com:6379/0"
...
end使用rails 5.2.0.beta 2和ruby2.3.1p112,我的IDE告诉我关于config.cache_store =行的如下内容:
如果我将散列包含在{}中,错误就会消失,即:
config.cache_store = :redis_cache_store, { url: "redis://example.com:6379/0" }文档是错误的,还是红宝石版本的问题(例如,文档可能假定ruby >= 2.4)?
无论如何,我不明白作业到底在做什么--怎么能把两件事分配给一件?
发布于 2018-01-09 23:26:48
当配置块命中cache_store并给定一个符号时,它假设它是一个缓存存储类,并执行如下操作:
:redis_cache_store.to_s.classify.constantize
# => RedisCacheStore这大概是一门课。您可以通过查看医生们并看到您也可以传递一个类来推断Rails是这样做的。
RedisCacheStore是在ActiveSupport::Cache命名空间中定义的,该名称空间继承自cache.rb中定义的ActiveSupport::Cache::Store。此存储类仅使用options = nil的单个参数进行初始化。
def initialize(options = nil)
@options = options ? options.dup : {}
end这表明了传递散列的要求。由于某种原因,它不使用options = {}初始化,这将使您的初始代码正确。因此,传递像第二个示例中那样的散列解决了错误。
https://stackoverflow.com/questions/48177606
复制相似问题