在 Rails 中存储(结构化)配置数据的位置

Posted

技术标签:

【中文标题】在 Rails 中存储(结构化)配置数据的位置【英文标题】:Where to store (structured) configuration data in Rails 【发布时间】:2011-07-06 21:36:10 【问题描述】:

对于我正在编写的 Rails 3 应用程序,我正在考虑从本地文件系统上的 XML、YAML 或 JSON 文件中读取一些配置数据。

重点是:我应该把这些文件放在哪里? Rails 应用程序中是否有存储此类内容的默认位置?

附带说明,我的应用部署在 Heroku 上。

【问题讨论】:

【参考方案1】:

我经常做的是:

如果文件是通用配置文件:我在目录 /config 中创建一个 YAML 文件,每个环境使用一个上层类密钥 如果每个环境(大项目)都有一个文件:我为每个环境创建一个 YAML 并将它们存储在 /config/environments/ 中

然后我创建一个初始化程序,在其中加载 YAML,我符号化配置哈希的键并将其分配给像 APP_CONFIG 这样的常量

【讨论】:

这个方法+1。 Here's an example of this method 有几个额外的功能;它可以很容易地用于第二种方法(每个文件一个环境)。【参考方案2】:

您还可以将它包含在模型中,这样您就可以从应用中的任何位置调用Settings.var_name,它会解析文件以找到合适的环境。

与settingslogicgem:

class Settings < Settingslogic
  source "#Rails.root/config/settings.yml"
  namespace Rails.env
end

【讨论】:

【参考方案3】:

Rails 默认创建一个config 目录,其中包含许多应用程序的配置信息,包括数据库和环境信息。我认为这是一个合乎逻辑的首要考虑。

第二个选择是app 目录,它包含应用程序的所有模型、视图和控制器,但我认为该目录包含可执行代码及其模板,所以我会选择@987654323 @目录,个人。

【讨论】:

【参考方案4】:

我通常会采用这种方法:

一个配置/config.yml

development:
  another_key: "test"
  app_name: "My App"
test:
  another_key: "test"
production:
  prova: "ciao"

然后在初始化器中创建一个结构体

#config/initializer/load_config.rb
require 'ostruct'
config = OpenStruct.new(YAML.load_file("#RAILS_ROOT/config/config.yml"))
::AppSetting = OpenStruct.new(config.send(RAILS_ENV))

根据环境设置没有数据库表,您可以通过简单的方式检索信息

AppSetting.another_key
AppSetting.app_name

here 参考 祝你有美好的一天!

【讨论】:

以上是关于在 Rails 中存储(结构化)配置数据的位置的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 应用程序中存储 Configatron 配置的正确/最佳位置是啥?

数据结构-单链表-结构体定义

数据结构-顺序存储结构

常用的存储架构有

在 Laravel 文件夹结构中存储 JSON 文件的位置

数据存储结构