Rails 4 次升级和 settings.yml
Rails 4 upgrade and settings.yml
我有一个 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 3 的某些 Rails 魔法是否在 Rails 4 中发生了变化导致它不起作用?
您应该使用环境变量。
ENV['twitter_app_secret']
如果您想将它们包含在文件中,请考虑在开发中使用 Figaro gem。
正如 Hunter 的评论中所指出的,设置不是预先配置的 class。有几种方法可以通过最少的重新配置来解决问题:
首先,您可以像这样将列出的配置添加到 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
中找到该过程的详细说明
我猜你的应用程序中有一个名为“设置”的 class,它从 YAML 文件中提取值。这是我能看到您的控制台输出正常工作的唯一方式,除非有一些特殊的配置。
我发现旧应用正在使用 https://rubygems.org/gems/rails_config/versions/0.99.0 gem. This is a legacy gem (Rails 3). The updated gem is https://github.com/railsconfig/config。我在 Rails 4 版本中安装了这个 gem,并且能够保留所有当前设置。
我有一个 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 3 的某些 Rails 魔法是否在 Rails 4 中发生了变化导致它不起作用?
您应该使用环境变量。
ENV['twitter_app_secret']
如果您想将它们包含在文件中,请考虑在开发中使用 Figaro gem。
正如 Hunter 的评论中所指出的,设置不是预先配置的 class。有几种方法可以通过最少的重新配置来解决问题:
首先,您可以像这样将列出的配置添加到 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
中找到该过程的详细说明我猜你的应用程序中有一个名为“设置”的 class,它从 YAML 文件中提取值。这是我能看到您的控制台输出正常工作的唯一方式,除非有一些特殊的配置。
我发现旧应用正在使用 https://rubygems.org/gems/rails_config/versions/0.99.0 gem. This is a legacy gem (Rails 3). The updated gem is https://github.com/railsconfig/config。我在 Rails 4 版本中安装了这个 gem,并且能够保留所有当前设置。