Ruby on rails Rails使用ActiveSupport::Cache::MemoryStore在两个api调用(控制器方法)之间保存变量
我有一些API,我想保存一些可以在每个API方法之间访问的值,所以我尝试使用ActiveSupport::Cache::MemoryStore。我可能没有正确使用MemoryStore(从未使用过它,找不到它的特定教程) 我是否正确使用MemoryStore?看起来它应该非常简单,但似乎不能保存任何价值Ruby on rails Rails使用ActiveSupport::Cache::MemoryStore在两个api调用(控制器方法)之间保存变量,ruby-on-rails,ruby,memcached,Ruby On Rails,Ruby,Memcached,我有一些API,我想保存一些可以在每个API方法之间访问的值,所以我尝试使用ActiveSupport::Cache::MemoryStore。我可能没有正确使用MemoryStore(从未使用过它,找不到它的特定教程) 我是否正确使用MemoryStore?看起来它应该非常简单,但似乎不能保存任何价值 class MyController # 1st API handler /post def first @cache = ActiveSupport::Cache::Memor
class MyController
# 1st API handler /post
def first
@cache = ActiveSupport::Cache::MemoryStore.new() if @cache.nil?
@cache.write('shared_val', params['user_key'])
end
# 2nd API handler /post
def second
@cache = ActiveSupport::Cache::MemoryStore.new() if @cache.nil?
saved_val = @cache.read('shared_val')
puts "#{saved_val}" # nil?????
end
我还尝试了一些我在SO答案中看到的例子,但似乎仍然无法保存价值
# In config file
config.cache_store = :memory_store
# 1st API handler /post
def first
Rails.cache.write("ABC", "abc")
check_val = Rails.cache.read('ABC')
puts "VALUE: #{check_val}" # shows correct 'abc'
end
# 2nd API handler /post
def second
Rails.cache.fetch("ABC") # gets nil, why???
Rails.cache.read("ABC) # also nil
end
默认情况下,
config.action\u controller.perform\u caching
为false。您需要在其他环境中启用它 您使用的是什么web服务器?内存存储区仅在单个进程内共享数据。根据文档,如果您在集群模式下使用Puma、Phusion Passenger或任何其他多进程或多服务器web服务器,则您的第二个请求可能无法访问相同的缓存。另外,fetch
是一种用于读取或写入的缓存方法。它使用您作为arg传递的密钥进行读取,如果读取失败,它将使用一个块写回缓存。它是用于延迟缓存的。您可能需要使用redis或memcached存储。你的第二个例子看起来更像我期望的工作。顺便说一句,这就是我在文档中读到的。Nate,我只是在开发环境中使用puma运行它。puma web_并发设置已被注释,我还尝试将最大线程数设置为1。当调用第二个API时仍然得到nil。如果设置config.action\u controller.perform\u caching=true
,该怎么办?是!!!!!!!!,抱歉,我懒得检查整个development.rb文件,else块正在禁用我的设置。谢谢你能把你的答案贴出来吗?我会接受的。我很肯定这可能会对以后的人有所帮助,因为我已经在谷歌上搜索过很多次了。