2011-11-18 84 views
1

我想制作一些环境变量。我如何设置/获取它们?例如,我想添加变量virtual_host,并能够从我的应用程序的任何地方访问它。我如何设置和访问配置变量的轨道3

谢谢

+0

[紧密] - 这个问题是不明确的,模糊的,不完整的,过于宽泛,或修辞和目前的形式不能合理地回答 - 并可能导致扩展的讨论:) –

回答

0

定义一个辅助类来访问这些属性,你可以访问你需要的地方。此外,它还有助于集中您的“全局”,同时让您有机会在此时放置业务逻辑。

在这里看到一个例子:http://www.randomsequence.com/articles/site-wide-global-variables-in-ruby-on-rails/

编辑:

关于设置这些值后持续存在,你可以创建一个ApplicationConfig Model对象。只要理解这个confit是如何工作的:它是否与用户偏好或整个应用程序相关联,以及持续和检索这些值所涉及的开销。

2

对于Rails应用程序中的配置变量,我倾向于使用ActiveSupport::Configurable。如果您的变量与特定类相关,这非常有效。假设你有一个叫做Security的类,并且你想为这个类配置全局属性。

class Security 
    include ActiveSupport::Configurable 

    config.enabled = true 
    config.level = 'high' 

    config_accessor :enabled, :level 
end 

如果你想分享大量的应用程序之间的类,你可以在运行时设置配置变量在初始化:

Security.config.enabled = false 

自从我宣布通过config_accessor两个变量,你不不必以config为前缀。你可以简单地调用Security.enabled或Security.level。尽管这是可选的。

之一有关此方法的另一好处之一是,该CONFIGS由子类继承的,但可以被重写:

class LessSecurity < Security 
    config.level = 'medium' 
end 
+0

我倾向于将自己的配置变量添加到Rails配置本身,但我不知道'ActiveSupport :: Configurable',谢谢。 – d11wtq

+0

PS:将它们添加到Rails配置文件的一个好处是,您可以轻松地在不同的环境之间进行不同的配置。 – d11wtq

+0

从YAML文件或其他东西读取它们也不会太困难。 –