我有using redis as a rails cache的以下配置,与rails doc:
密切配合Rails.application.configure do
...
config.cache_store = :redis_cache_store, url: "redis://example.com:6379/0"
...
end
使用rails 5.2.0.beta2和ruby 2.3.1p112,我的IDE告诉我关于config.cache_store =
行的以下内容:
如果我将散列括在{}
中,错误就会消失,即:
config.cache_store = :redis_cache_store, { url: "redis://example.com:6379/0" }
文档是错误的,还是ruby版本的东西(例如,doc可能假设ruby> = 2.4)?
在任何情况下,我都不明白作业实际上在做什么 - 如何将两件事分配给一件作品?
答案 0 :(得分:0)
当配置块命中cache_store
并且给出一个符号时,它假定它是一个缓存存储类并执行以下操作:
:redis_cache_store.to_s.classify.constantize
# => RedisCacheStore
这可能是一个类。您可以通过查看the docs并看到您也可以传递一个类来推断Rails这样做。
RedisCacheStore在ActiveSupport::Cache
命名空间内定义,该命名空间继承自ActiveSupport::Cache::Store
,cache.rb
中定义了options = nil
。此商店类仅使用def initialize(options = nil)
@options = options ? options.dup : {}
end
:
options = {}
表示需要传递散列。由于某种原因,它不会使用{{1}}进行初始化,这会使您的初始代码正确无误。因此,像第二个示例中那样传递哈希解决了错误。