Rails每请求哈希?

Way*_*Kao 15 ruby-on-rails

有没有办法在Rails中缓存每个请求数据?对于给定的Rails/mongrel请求,我有一个半昂贵的操作的结果,我想在该请求中多次访问.是否存在可以存储和访问此类数据的哈希?

它需要相当全局,并且可以从视图,控制器和库中访问,例如Rails.cache和I18n.

如果这就是它需要的话,我可以做一些猴子修补.

  • Memcached不起作用,因为它将在请求之间共享,这是我不想要的.
  • 同样地,全局变量不起作用,因为不同的请求将共享相同的数据,这不是我想要的.
  • 实例变量不起作用,因为我想从不同的类中访问数据.

Ale*_*ang 6

还有request_store gem.从文档:

将此行添加到应用程序的Gemfile:

gem 'request_store'
Run Code Online (Sandbox Code Playgroud)

并使用此代码存储和检索数据(仅限于请求):

# Set
RequestStore.store[:foo] = 0

# Get
RequestStore.store[:foo]
Run Code Online (Sandbox Code Playgroud)

  • @Papipo 这个 gem 的文档明确地将自己定义为 Thin 和 Puma 等线程服务器的 `Thread.current` 的功能替代品。 (2认同)

cwn*_*nja 5

尝试PerRequestCache。我从SQL查询缓存中窃取了设计。

使用以下命令进行配置config/environment.rb

config.middleware.use PerRequestCache
Run Code Online (Sandbox Code Playgroud)

然后将其用于:

PerRequestCache.fetch(:foo_cache){ some_expensive_foo }
Run Code Online (Sandbox Code Playgroud)