gpt4 book ai didi

ruby-on-rails - 为什么使用 cattr_accessor(JRuby、Rails)重新初始化我的类变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:04 25 4
gpt4 key购买 nike

好吧,我知道这有点怪诞,但我正在运行 JRuby on Rails,而且我对两者都比较陌生。我看到一些我无法理解的行为,我想知道是我做错了什么还是我的堆栈有问题。基本问题是我的类属性似乎正在重新初始化,这是我不希望发生的事情。

这基本上是我的代码

class MyController < ActionController::Base
cattr_accessor :an_attr
before_filter :init_an_attr

def init_an_attr
if @@an_attr.nil?
@@an_attr = {}
end
# do some other stuff here
end
end

问题在于每次调用 init_an_attr 时,if 条件的计算结果为真,我最终重新分配 @@an_attr。

这是预期的行为吗?如果可以,您能解释一下原因吗,因为对我来说,作业应该只发生一次。

最佳答案

在 Rails 中,当以开发模式运行时,类不会被缓存。 MyController 和所有其他类都会在每次请求时重新加载。在生产环境中运行时,情况并非如此 - 类被缓存。

但是,即使在生产环境中,这个变量对于特定的应用程序实例也是本地的 - 例如,如果您使用两个 Mongrels 运行,每个都会有这个变量的不同版本。

如果您希望跨多个请求设置状态,请考虑使用 session 或将值存储在数据库中。类变量确实不适合跨请求存储。

关于ruby-on-rails - 为什么使用 cattr_accessor(JRuby、Rails)重新初始化我的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5121102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com