Tag: 类变量

在Rails中不是线程安全的东西的示例

我已经在Rails中看到了关于线程安全的线程以及关于该主题的各种网页,我确信每个人都很擅长朗读它是什么,并给出了关于什么不是线程安全的“技巧”(“类变量” !“),但我似乎永远无法找到一个清晰,简单,完整的Rails实际上不是线程安全的例子,我想知道是否有人真正了解它。 如果有人能certificate我错了并给予:我将不胜感激: 一个清晰,简单,完整的Rails中不是线程安全的东西的例子。 应该清楚代码的位置(即,如果它在控制器中,请显示它)并且不应该留给读者的想象力(例如不存在的方法)。 此外,不应该有任何多余的代码或逻辑。 确切地说,两个用户在两个不同的线程上同时连接到网站的情况下会出现问题。 如何纠正这个问题。 更重要且与Rails相关的示例越好,所以如果您可以举例说明一个用户可能会看到另一个用户的数据(或类似数据),请执行此操作。

是否可以在每个用户的基础上设置Active Resource HTTP身份validation的线程安全?

Active Resource可以使用在类级别设置的HTTP身份validation。 例如: class Resource < ActiveResource::Base end Resource.user = 'user' Resource.password = 'password' 要么 Resource.site = “http://user:password@site.com/” 但是,如果我根据用户登录使用不同的HTTP身份validation怎么办? 如果我更改Resource.user和Resource.password,是否会导致竞争条件,其中来自一个线程的请求突然开始使用其请求在另一个线程中同时运行的用户的身份validation? 或者这是一个非问题(只要我重置请求之间的身份validation),因为rails服务器不是multithreading的? 即使没有线程安全问题,如果我无法重置它们仍然存在风险,以前用户的凭据将在未来的请求中自动使用。 更新:在对ActiveResource感到沮丧之后,我编写了自己的REST库: https : //github.com/DeepWebTechnologies/well_rested

Rails是否共享 – 或者可以将请求分开访问相同的运行时变量?

PHP在无共享环境中运行,在这种情况下,这意味着每个Web请求都在一个干净的环境中运行。 除了通过单独的持久层(文件系统,数据库等)之外,您无法访问其他请求的数据。 Ruby on Rails怎么样? 我刚读了一篇博文,说明单独的请求可能会访问同一个类变量。 我想到这可能取决于Web服务器。 Mongrel的FAQ说明Mongrel每个请求使用一个线程 – 建议无共享环境。 FAQ继续说RoR不是线程安全的,这进一步表明RoR不会存在于共享环境中,除非新请求重用从先前请求创建的内存中对象。 显然这具有巨大的安全后果。 所以我有两个问题: RoR环境是否共享? 如果RoR在共享环境中运行(或者可能在某些情况下运行),那么我应该对哪些变量和其他数据存储感到偏执? 更新:我会进一步澄清。 在Java servlet容器中,您可以拥有跨多个请求持久化的对象。 这通常用于缓存多个用户可以访问的数据,数据库连接等。在PHP中,这不能在应用程序层完成,它必须在像Memcached这样的单独的持久层中完成。 所以双重问题是:哪种情况是RoR(PHP或Java),如果像Java一样, 哪些数据类型在多个请求中持续存在?

inheritance类中的Ruby和类变量

class A def set(v) @@v = v end def put puts @@v end end class B < A end class C b C.new.set ‘c’ C.new.put # => c B.new.put # => c 为什么? 我怎么写这个在最后B.new.put中有’b’?

为什么在Ruby中使用类变量被认为是“代码味道”?

根据Reek的说法,创建一个类变量被认为是“代码味道”。 这背后有什么解释?

local,instance和class变量之间有什么区别?

可能重复: 类变量和类实例变量之间的区别? 在阅读Ruby书时,我似乎错过了变量篇。 现在我似乎无法理解以下事情: 什么是实例变量? 什么是类实例变量? variable @instance_var和@class_instance_var之间有什么区别? 我试着阅读不同博客中的一些post,但我仍然不明白。 任何帮助,将不胜感激。

如何从ruby中的内部类访问外部类的类变量

我在下面的Ruby中有一些代码: class A @@lock = Monitor.new class B def method @@lock.synchronize puts “xxxxx” end end end end 运行后抛出一个错误,如下所示: 未初始化的类变量@@ lock in A :: B(NameError) 如果我想知道如何从内部类B的方法访问外部类A的类变量@@ lock,该怎么做? 先感谢您。

类变量的范围

在两个B和C类中设置一个类变量@@foo ,其中两个类都不是另一个的子类,但它们都包含一个公共模块A ,似乎分别为B和C创建@@foo , A无法访问: module A; end class B; include A; @@foo = 1 end class C; include A; @@foo = 2 end module A; p @@foo end # => NameError: uninitialized class variable @@foo in A class B; p @@foo end # => 1 class C; p @@foo end # => 2 但是,如果在A分配@@foo […]

为什么要在Ruby中避免使用@@ class_variables?

我知道有人说在Ruby中应该避免使用类变量(例如@@class_var ),而应该在类范围中使用实例变量(例如@instance_var ): def MyClass @@foo = ‘bar’ # Should not do this. @foo = ‘bar’ # Should do this. end 为什么在Ruby中使用类变量不受欢迎?

实例变量,类变量以及它们之间的区别在ruby中

我很难理解实例变量,类变量以及它们之间在ruby中的区别……有人可以向我解释它们吗? 我已经完成了大量的谷歌搜索,完全无法理解它们。 谢谢!