Rails和类变量:这会在用户和服务器调用中持续存在吗?

Cra*_*lot 3 ruby ruby-on-rails ruby-on-rails-3

我们在Rails 3.0.6上.

以下代码是否会在Rails中的页面加载和用户之间持续存在?或者每次请求都重新定义?代码位于控制器的顶部.

@@list = []

hero = {}
hero['name'] = 'so'
hero['superpowers'] = ['coding', 'qa', 'spec_writing']
@@list.push hero

hero2 = {}
hero2['name'] = 'so2'
hero2['superpowers'] = ['coding']
@@list.push hero2
... more Hashes pushed into @@list
Run Code Online (Sandbox Code Playgroud)

该列表每月只更改一次,我们希望高效快速地将此数据提供给页面请求.我们最终将使用Rails.cache从数据库中读取,但我们现在正在使用以下方法(假设它有效).

Mic*_*ski 10

在开发中,默认行为是在每个请求上重新加载类,从而重置您的类变量.但是,在生产中,类被初始化一次,因此类变量将持续跨多个请求和多个会话.

你应该尽快采用适当的缓存技术.显然,当重新启动应用程序时,您不能将值保留在类的重新加载之外.此外,如果Web服务器是多线程的(因为它可能是多线程的),它可能在共享类变量的不同线程上运行应用程序的多个实例,从而可能在请求之间产生不一致.