2012-02-22 55 views
20

为什么我们应该避免在rails中使用类变量@@?那有没有什么安全漏洞。请回答,因为我是新的铁轨。我很多使用实例变量@variable_name。我尝试过一次@@variable_name为什么我们应该避免在rails中使用类变量@@?

我只知道有关类变量,类变量是对象

但我真的想知道我们为什么要避免使用导轨类变量@@之间共享?

+0

这听起来像在Java中'static'变量。没有理由不使用它,只是意识到它不属于你的实例,并可能异步改变。 – Chloe 2013-10-13 03:33:15

回答

41

只是因为他们是不是线程安全的。许多rails =有能力的服务器是多线程的。这意味着您的应用程序在任何时候都可能有多个运行实例,并且您的某个用户的任何请求将被任意分配给其中的一个用户。类变量不在进程之间共享,所以有可能您的类变量在后续请求中会有所不同。

即使你刻意设法在单线程服务器上运行你的应用程序,也不能保证你的应用程序不会请求之间重新启动,失去你的类变量。

如果你想类似变量提供什么级功能,我强烈建议你看看键值存储如Memcached的或Redis的。

+0

进程之间不共享任何内容,而不仅仅是@@ vars。猜猜我们不应该使用@vars也是出于同样的原因,如果我们? – 2012-02-22 14:32:24

+7

@Victor好吧,'@ variables'是实例变量,它们在**请求内是一致的**,因为请求会产生控制器的新实例。只是不要指望在下一个请求中找到它们。 – edgerunner 2012-02-22 14:36:15

+0

downvoter会照顾解释原因吗? – edgerunner 2012-02-22 14:37:54

相关问题