1

我正在尝试创建一个 rails 应用程序并将其放在 github 上,但是在将个人设置与我签入到 git 的内容中分离出来时遇到了一些麻烦。就像您通常签入 database.yml.example 并让人们创建自己的 database.yml 一样,我想用一堆其他文件(虽然都是 rb 文件)来做到这一点,比如 secret_token 和 production.rb,但我不想让设置过程涉及将 15 个示例文件复制到实际使用的文件中。

我最终做的是在我的配置目录中创建一个 settings.yml.example 文件,并将其他文件中的所有这些设置放在那里。然后设置过程只有 2 个副本(database.yml 和 settings.yml)。然后我将它添加到 environment.rb 的开头

#allow files to read their private settings from settings.yml using SETTINGS
require 'yaml'
SETTINGS = YAML.load(IO.read(Rails.root.join("config", "settings.yml")))

当我需要文件中的某些内容时,我会说类似

Foo::Application.config.secret_token = SETTINGS["secret_token"]

这工作正常,直到我尝试运行 rake 测试,当它从 Rails.root.join 调用中给我未初始化的常量 Rails (NameError)

我的问题是这是完成我想要完成的事情的好方法吗?如果是这样,是否有更好的地方放置加载设置文件的代码?似乎我可以在每次单独调用之前加载它,并在加载之后添加类似“除非定义了设置”之类的内容,但是在任何地方都必须这样做会很烦人

注意:对于任何好奇的人,我必须复制的文件是

  • secret_token.rb
  • production.rb(用于 config.action_mailer.default_url_options)
  • devise.rb(用于 config.pepper)
  • 随着我开始使用更多的库(对此仍然很陌生),我期待更多的未来
4

1 回答 1

1

这是在评论中回答的,所以我将在这里复制托马斯的答案以使其更清楚。

figaro和econfig(由 carrierwave 和 capybara 的创建者提供)都是为此目的的绝佳选择我个人将 figaro 与它的 config/application.yml 文件一起使用,该文件被排除在版本控制之外,因为几个月以来在开源项目中取得了巨大成功。

于 2013-04-17T21:04:44.483 回答