Rails控制台中的缓存返回为空值nil

9

我无法从控制台中查看开发或生产环境下缓存中的任何内容。

在开发环境中,我已经启用了缓存并将其设置为内存存储,在生产环境中,我使用dalli gem和Heroku上的Memcachier。

无论我尝试什么键值,都返回nil。

然而,在开发环境中,如果我在进行Rails.cache.fetch之前放置一个binding.pry,我可以在那里执行Rails.cache.read并看到返回的内容。确实如此,如果是这样,执行不会进入fetch的块中。

从控制台中,如果我尝试从pry断点控制台中返回缓存结果的相同键读取Rails.cache.read,我得不到任何东西。看起来控制台有一个单独的缓存,就好像如果我在控制台中执行Rails.cache.write("whatever", "blah")Rails.cache.read("whatever"),我会得到预期的"blah"。

是否有一种方式可以从控制台中对正在运行的服务器进行缓存实验?

1个回答

8

更改缓存存储方式:内存存储器仅将所有内容存储在进程的内存中,因此每个应用程序实例都将有单独的缓存。特别是控制台无法看到从正在运行的Web应用程序设置的任何内容。

您可以使用文件存储(将数据存储在tmp中的临时文件中),或者您还可以在本地使用dalli存储 - memcached非常容易运行。


好的,这对开发来说是有效的,但在生产环境中我仍然得不到任何东西,但我会接受你的答案,因为它确实回答了我提出的问题。在视图中进行片段缓存时,在 HAML 中我使用 - cache("the_key") do,我能否使用 Rails.cache.read 在控制台中访问它?即使切换到文件存储,似乎也不行,即使在开发环境中也是如此。我该如何获取这些缓存的内容? - Hsiu Dai
1
NM,我找到了自己的答案,使用ActionController::Base.new.fragment_cache_key("the_key"),我可以得到略微修改的缓存键(在这种情况下,它前面加上了view/),并且可以使用Rails.cache.read读取该修改后的键或者只需使用未修改的键ActionController::Base.new.read_fragment("the_key")进行读取。感谢您的回答! - Hsiu Dai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接