Rails模型全局变量

时间:2013-05-30 12:52:22

标签: ruby-on-rails

我想实现消息的功能,以显示在我网站的不同页面上。 我为此创建了一个包含字段的模型,例如pagemessageactive。如果active=false,则不会显示该消息。这很好用。

现在我想添加一个能够打开/关闭所有消息一段时间的功能。我不想更新每条消息并设置active=false,因为1)可能有很多消息,2)我必须保存哪些消息在关闭以恢复初始时处于活动/非活动状态重新开启的状态。

如果我可以在我的模型中使用新的“全班”变量@@active,这将非常方便。但是,使用多线程应用程序(我使用unicorn)可能会导致麻烦,因为@@active不会在所有进程中共享。

我无法为此找到一个好的解决方案,也许有人可以提供帮助?

2 个答案:

答案 0 :(得分:0)

也许创建一个名为DISABLE_ALL_MESSAGES的环境变量,然后覆盖message#active方法以引用ENV["DISABLE_ALL_MESSAGES"]

def active
  ENV["DISABLE_ALL_MESSAGES"] && super
end

另一种选择是将设置存储在数据库中并以类似的方式引用它。

答案 1 :(得分:0)

尝试在unicorn配置中设置preload_app = true。这使得独角兽主进程可以预加载应用程序,所有其他工作程序共享加载的数据结构。您可能希望转移到Ruby Enterprise Edition以跨进程共享内存。