如何检查 Rails 缓存的内容?

dlu*_*dlu 4 ruby-on-rails

我正在尝试调试在 Heroku 上运行的 Rails (5.0.0.beta2) 的缓存视图中的陈旧条目。我想查看缓存中的条目,以确认它们的命名方式符合我的预期,并且它们应该过期。

\n\n

有什么办法可以做到这一点吗?我发现这个问题,我如何查看rails缓存的内容,这表明Rails.cache.read("your_key")。所以,使用bin/rails c(在 Heroku 上)我尝试过:

\n\n
Rails.cache.read(User.find(19).cache_key) => nil\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 19 是:id我看到过时数据的用户之一的用户。这让我有点难住了...

\n\n

如果我尝试:

\n\n
User.find(19).cache_key => "users/19-20160316151228266421"\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,当缓存条目据称已过期时,日志行如下所示:

\n\n
Expire fragment views/users/19-20160316151228266421 (0.2ms)\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我尝试Rails.cache.read在该路径上执行 a ,这也返回nil\xe2\x80\x93\xc2\xa0 我也尝试对尚未过期的用户执行相同的操作,然后nil再次得到。

\n\n

我想知道路径中的差异是否表明存在问题,或者是否有办法查看创建的密钥的路径(我一直假设它至少与斜杠之后的部分匹配)。

\n

All*_*son 8

Cache 有以下实例变量:

[:@options, :@data, :@key_access, :@max_size, :@max_prune_time, :@cache_size, :@monitor, :@pruning]
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方法检查数据:

Rails.cache.instance_variable_get(:@data)
Run Code Online (Sandbox Code Playgroud)