Ruby on rails 在Rails中,每个新请求都会重置任意类的类属性吗?
假设我在Rails应用程序中有一个类FooRuby on rails 在Rails中,每个新请求都会重置任意类的类属性吗?,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,假设我在Rails应用程序中有一个类Foo class Foo @@bar = "hello" def self.change @@bar = "goodbye" end def self.get_bar @@bar end end 如果在某个时刻,某个用户执行一个控制器操作,该操作包括 Foo.change 在服务器重新启动之前,Foo.get\u bar会在每个用户会话中返回“再见”吗?yes,@@s是类变量,但类变量不是线程安全的,因此多
class Foo
@@bar = "hello"
def self.change
@@bar = "goodbye"
end
def self.get_bar
@@bar
end
end
如果在某个时刻,某个用户执行一个控制器操作,该操作包括
Foo.change
在服务器重新启动之前,Foo.get\u bar会在每个用户会话中返回“再见”吗?yes,@@s是类变量,但类变量不是线程安全的,因此多线程系统将对此做出不一致的响应。一般经验法则:不要使用类变量 在开发环境中,每个请求都会重新加载类,因此您将看到每个请求都会重置类变量 在生产环境中,类不会在每个请求上重新加载,因此一般来说,类变量应该在给定的Ruby进程中跨请求保留 请记住,某些Rails服务器实际上可能有多个进程,因此不能保证所有用户和所有请求都共享类变量 其他Rails服务器可能是多线程的,因此您必须特别小心如何改变共享状态(例如类变量) 出于这些原因,最好避免像@andrew21所提到的那样以这种方式使用类变量