在开源rails应用程序中创建全局设置文件

时间:2013-04-15 08:35:55

标签: ruby-on-rails

我正在尝试创建一个rails应用程序并将其放在github上,但是我在将个人设置与我检入的内容分开时遇到了一些麻烦。就像你通常检查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(for config.action_mailer.default_url_options)
  • devise.rb(for config.pepper)
  • 我期待更多未来,因为我开始使用更多的库(对此仍然是新的)

1 个答案:

答案 0 :(得分:1)

这在评论中得到了解答,所以我会在这里复制托马斯的答案,以便更清楚。

figaroeconfig(由carrierwave和capybara的创造者)都是为此目的的伟大宝石。我个人使用figaro和它的config / application.yml文件,这个文件从版本控制中排除,因为在开源项目上花了几个月才取得了巨大的成功。