Double Pipe || =运算符在控制台中工作,但在服务器中不起作用

时间:2013-03-06 14:55:26

标签: ruby ruby-on-rails-3

class Test
  def settings
   @setting ||= load_user_env
  end

  def load_user_env
   {one: 'Test'}
  end
end


t = Test.new
t.settings
t.settings

在rails控制台中load_user_env方法被调用一次,但在WEBrick的开发环境中,它每次被调用?

怎么可能?

1 个答案:

答案 0 :(得分:1)

编辑:实例变量应仅保留在每个请求的上下文中,因此每次发出请求时都应重新初始化。在您的控制台中,当您执行t = Test.new时,您将创建该类的单个实例,这就是为什么load_user_env仅被调用一次的原因。您可以使用类变量@@setting,它应该在Test的请求和实例之间保持不变,但我不确定如何在dev模式下重新加载类会影响它。

Rails会在每个请求中以开发模式重新加载类。在控制台中,除非您拨打reload!

,否则不会

如果为开发环境设置config.cache_classes = true,则不应再重新加载它们,它也应该使它更快。不利的一面是,每次进行更改时都必须重新启动服务器。