代码之家  ›  专栏  ›  技术社区  ›  konung

在Rails应用程序中存储全局数据的最佳位置是哪里?

  •  12
  • konung  · 技术社区  · 14 年前

    我想知道在rails应用程序中的全局设置存储位置是否有最佳实践。我的意思是:我定义了一些global,它们可能会改变,但不太可能,而且似乎不适合将它们存储在DB中,因为它们使用了太多。例如,我有系统电子邮件;系统电子邮件签名;系统\存储\根目录。

    现在我把它们放在environment.rb中,但我不确定这是不是存放它们的合适地方。

    非常感谢。

    编辑:

    接受的答案仍然站在适当的,但我后来使用 https://github.com/markbates/configatron

    6 回复  |  直到 11 年前
        1
  •  15
  •   Sean Seefried    14 年前

    我最喜欢的技术之一是将包含常量的文件放在目录中 config/initializers/ (此目录中的所有文件都是自动加载的),但每个不同的Rails环境都有一个节。例如

    
    case ENV['RAILS_ENV']
      when "development"
        SYSTEM_EMAIL = ...
        SYSTEM_EMAIL_SIGNATURE = ...
      when "staging"
        SYSTEM_EMAIL = ...
        SYSTEM_EMAIL_SIGNATURE = ...
      when "production"  
        SYSTEM_EMAIL = ...
        SYSTEM_EMAIL_SIGNATURE = ...
    end
    

    config/initializers/email_constants.rb 另一个呢 config/email_constants.yml

    
    development:
      :system_email: ...
      :system_email_signature: ...
    staging:
      :system_email: ...
       system_email_signature: ...
    
    ... etc ...
    

    config/initializers/email\ u constants.rb

    
    EMAIL_CONSTANTS = YAML.load_file("#{RAILS_ROOT}/config/email_constants.yml")[RAILS_ENV]
    

    这将加载整个YAML文件,并为相应的键(表示 RAILS_ENV EMAIL_CONSTANTS

    这两种技术的优点是局部性。您可以将所有相互关联的常量(即本例中的电子邮件常量)放在一个文件中。另外,不是将相同的常量分布在三个不同的文件(每个Rails环境一个)中,而是将它们全部放在一个文件中。

        2
  •  10
  •   Ben    14 年前

    因为这些值通常会根据您运行的环境而改变,所以我将全局变量存储在 config/environments/development.rb|production.rb|test.rb ,每个环境都有适当的值。

        3
  •  2
  •   Marc-André Lafortune    14 年前

    Rails3介绍了应用程序对象。即使使用Rails2,您也可能希望以类似的方式存储全局变量。

        4
  •  1
  •   VP.    14 年前

    environment.rb就是这个地方。您可以将其添加到模块并添加到lib目录。然后您可以将其称为Module::MY\u GLOBAL\u变量。两者各有优缺点。在environment.rb中是可以的,但有时看起来很混乱。如果所有这些全局变量都是相关的,那么您可以将它们分组到一个模块中。

        5
  •  1
  •   Harish Shetty    14 年前

    我将这些配置信息存储在一个YML文件中。请参阅此 screen-cast 更多细节。

    或者你可以使用一个叫做 app_config

        6
  •  1
  •   sameera207    14 年前

    通常当我做这样的事情时,我有两种方法

    1-如果我的全局变量对所有3个环境(开发、测试、生产)都是公共的,那么我将把它存储在

    config/environments.rb文件

    但是我的价值观随着环境的变化而变化

    例如:我的开发环境系统存储根是“/development\u ROOT/”,测试环境系统存储根是“/testing\u ROOT/”

    然后我会把它们放在里面

    配置/环境/

    config/environments/development.rb将具有 系统\存储\根='/开发\根/'

    系统\存储\根='/测试\根/'

    系统\存储\根='/生产\根/'

    干杯, 萨米拉