【问题标题】:Configure some variable inside config or yml file, in Rails在 Rails 中的 config 或 yml 文件中配置一些变量
【发布时间】:2014-08-14 13:12:16
【问题描述】:

在我的项目中,我想在配置或 yml 文件中放入一些配置详细信息,例如键、一些唯一代码,以便在处理时访问。以及如何在 UI 或 JS 文件中访问该变量

我无法将值保留在 database.ymlany config file 中。

其中一个假设就像放在 application.yml 中

config/application.yml

defaults: &defaults
  email: test@example.com
  secret: example_test

【问题讨论】:

  • 看看rails_config gem。这对我来说总是很方便。

标签: ruby-on-rails configuration


【解决方案1】:

有几种方法可以实现该功能。

  1. 您可以制作自己的配置文件并编写一个类来解析该文件(如果是 .yml 配置,则使用 Psych),然后访问该类的方法。
  2. 您还可以将配置存储在常用模型中并将它们保存在数据库中。例如,您可以通过这种方式在管理面板中更改它们。
  3. 您可以使用https://github.com/bkeepers/dotenv gem 将变量保存在ENV
  4. 另一个 gem https://github.com/railsjedi/rails_config 用于 rails 配置。它似乎具有第一点的功能

【讨论】:

    【解决方案2】:

    您可以创建一个初始化程序来加载一个 YML 文件,根据您当前的环境对其进行解析并将结果保存在一个全局变量中。

    例如:

    config/application.yml

    defaults: &defaults
      email: example@example.com
      secret: secret
    
    test:
      <<: *defaults
      secret: another_secret
    
    development:
      <<: *defaults
    
    production:
      <<: *defaults
      email: production@example.com
      secret: production_secret
    

    然后您可以使用此初始化程序加载此配置:

    config/initializers/app_config.rb

    class ConfigurationFileNotFound < RuntimeError ; end
    
    $CONF = begin
      YAML.load_file(Rails.root.join('config', 'application.yml'))[Rails.env].symbolize_keys
    rescue Errno::ENOENT => e
      raise ConfigurationFileNotFound, 'config/application.yml was not found. You can find an example of it in config/application.yml-example'
    end
    

    现在您的配置应该可以在应用程序的任何位置使用全局变量 $CONF

    $CONF[:email]
    

    如果您有一个大型配置,但您应该创建一个单例类并让它初始化您的 yml 文件并在其中的属性中加载其键和值,然后使用该类来访问所需的配置。

    【讨论】:

    • 非常感谢。它帮助我将默认数据从外部移动到 application.yml :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2016-07-12
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多