Rails 4升级和settings.yml

时间:2015-08-21 15:51:25

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

我有一个Rails 3应用程序,我使用以下约定来设置默认值...

默认设置位于config/settings.yml,看起来像......

twitter_app_secret: '234wer234'
facebook_app_id: 'notset'
facebook_app_secret: 'notset'
session_token: '123456789er3se901234567890'

...而且我可以在应用程序中调用这些设置,例如Settings.twitter_app_secret。在控制台中它就像......

ruby-2.1.5@learn marklocklear:learn marklocklear$ rails c
Loading development environment (Rails 3.2.21)
2.1.5 :001 > Settings.twitter_app_secret
 => "234wer234"

我正在努力将此应用更新到Rails 4,并且该应用无法加载以下错误:

NameError: uninitialized constant Settings

这是我继承的遗留应用。 Rails 4中的一些Rails Magic of Rails 3是否会导致这种情况无效?

2 个答案:

答案 0 :(得分:0)

正如Hunter的评论所示,设置不是预先配置的类。有几种方法可以用最少的重新配置来修复问题:

首先,您可以将列出的配置添加到config / application.rb,如下所示:

config.twitter_app_secret: '234wer234'
config.facebook_app_id: 'notset'
config.facebook_app_secret: 'notset'
config.session_token: '123456789er3se901234567890'

然后在你的应用程序中访问它们:

Rails.configuration.twitter_app_secret

其次,您可以将值添加到config.yml而不是settings.yml。有关该流程的详细说明,请访问http://edgeguides.rubyonrails.org/configuring.html

我猜你的应用程序中有一个名为Setting的类,它从该YAML文件中提取值。这是我能看到你的控制台输出工作的唯一方法,除非有一些特殊的配置。

答案 1 :(得分:-3)

您应该使用环境变量。

ENV['twitter_app_secret']

如果您想将它们包含在文件中,请考虑在开发中使用Figaro gem