【问题标题】:How to properly store and access global app configuration settings?如何正确存储和访问全局应用程序配置设置?
【发布时间】:2017-04-06 13:15:32
【问题描述】:

在编写 Rails 4 应用程序的过程中,我最近一直想知道在哪里以及如何存储自定义配置信息?具体来说,我的意思是 App 标题特殊电子邮件地址、也许是 主题选项 等,我想在使用任一环境的整个应用程序中引用这些内容变量或其他结构。我一直在挖掘 - 在部署之前 - 最终使用了一个漂亮的初始化程序来创建这样的 OpenStruct

require 'ostruct'                                                                                                                                                                    

all_config = YAML.load_file("#{Rails.root}/config/app_config.yml") || {}
env_config = all_config[Rails.env] || {}
AppConfig = OpenStruct.new(env_config)

读取以下 yaml 文件 (app_config.yml)

default: &default                                                                                                                                                                    
  general:
    app_title: MyName
    maintainer_email_address: someone@somewhere.org

development:
  <<: *default

test:
  <<: *default

production:
  <<: *default

在开发过程中,我非常乐意通过 AppConfig.general.* 访问我必须访问的所有内容,但不幸的是,这在生产中不起作用,尝试启动服务器/控制台最终会引发 Uninitialized constant AppConfig-错误。

现在我有两到三个问题:

1) 我可以假设由于文件的加载顺序,这在生产中不起作用,其中production.rb 被加载之前初始化程序(-> AppConfig 作为全局变量不是现在)

2) 如果是:为什么这在开发中有效?有什么不同?

3) 存储上述信息的好习惯是什么?我的愿望是能够通过某种用户/管理界面轻松地获取和设置这些信息。从那里我不想太用力地弄乱我的环境文件......

好的,希望有人能帮帮我,在此先感谢! 安迪

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

RAILS_ROOT/config 目录中添加您的配置文件。

# config/foo.yml
development:
 api_key: 'my_development_api_key'

staging:
  api_key: <%= ENV['API_KEY'] %>

production:
  api_key: <%= ENV['API_KEY'] %>

RAILS_ROOT/config/initializers目录中添加初始化文件

# config/initializers/foo.rb
foo_config = Rails.application.config_for(:foo)

Rails.application.configure do
  config.foo = ActiveSupport::OrderedOptions.new
  config.foo.api_key = foo_config[:api_key]
end

在您的代码中使用您的配置。

Rails.configuration.foo.api_key

有时您无法在代码中提交您的密钥和其他凭据。在这种情况下,请使用环境变量。我使用dotenv gem 来管理环境变量。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2011-01-27
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多