如何从数据库加载配置,仅在应用程序重新启动或触摸URL时刷新

时间:2011-01-31 02:24:29

标签: ruby-on-rails ruby-on-rails-3 configuration

好的,我有一个Rails 3应用程序,我使用CouchDB作为我的主数据库,以利用它的复制功能。

无论如何,我想要做的是将一些配置类型的东西存储在数据库中的1个文档中,并在应用程序在生产中启动时加载此配置文件的值一次,并且仅在用户转到管理面板时重新加载并明确要求它发生。我想通过触摸URL来清除加载的配置或其他东西。

我的想法是我只是在application_controller中创建一个before_filter,但由于我是rails的新手,我不知道这是否是正确的方法。

before_filter :get_config

private

def get_config
  @config = Config.get('_id')
end

显然,这会运行我不想要或不需要的每个请求。有没有办法保存配置输出,所以我不必每次请求获取它,或者是否有更好的方法来执行此操作。

提前致谢。

1 个答案:

答案 0 :(得分:1)

实际上我正在写一篇关于在rails中使用全局变量的正确方法的文章。这似乎是引入全局变量的情况,因为它们的值在不同用户之间共享。

在你的before_filter中,试试这个:

def get_config
  $config ||= Config.get('_id')
end

仅当Config.get('_id')为false或为零时,才会调用$config。否则,$ config wiil保持不变。

棘手的部分是整个应用程序中存在的全局变量(以$符号开头)。所以$config随处可见(对于不小心的设计来说这将是一个问题!)

另一点是,正如你所说的你是rails的新手,我建议你在使用它之前阅读更多有关全局变量的内容,并且不要添加它。