我相信你对config/application.rb提供给你的期望有点不正确。 ActiveRecord :: Base和ActiveController :: Base特征类使用在config/application.rb中配置的Rails :: Application :: Configuration类。这些属性在从基类或其特征类中下来的类中不可用。这就是您在ApplicationController中遇到错误的原因。
通常有两种方式来进行配置初始化的Rails应用程序。第一种方式是通过初始创建配置模块,然后负载值到其中:
首先,创建一个Twiter配置模块:
#lib/twitter_config.rb
module TwitterConfig
def self.config
@@config ||= {}
end
def self.config=(hash)
@@config = hash
end
end
创建YAML配置文件:
# config/twitter.yaml
development: &base
key: "foo"
secret: "bar"
test:
<<: *base
key: "foo2"
production:
<<: *base
secret: "barbar"
或者,如果您不打算将config/twitter.yaml添加到您的SCM,则可以跳过此步骤并通过环境变量设置密钥和秘密。这将是在Heroku上部署公共SCM资源库的应用程序的建议解决方案。
然后加载并通过初始化设置的值:
#config/initializers/01_twitter.rb
require 'twitter_config'
TwitterConfig.config = YAML.load_file("config/config.yml")[Rails.env].symbolize_keys
它通常是到号码您的初始化文件,Rails会,以便根据自己的文件名加载它们的最佳做法。如果您正在初始化数据存储并且对于其他步骤至关重要,那么它需要最低的数字。另外,如果您使用的环境变量,这将是init文件:
#config/initializers/01_twitter.rb
require 'twitter_config'
TwitterConfig.config[:key] = ENV['twitter_config_key']
TwitterConfig.config[:secret] = ENV['twitter_config_secret']
整个Rails应用程序,你现在有TwitterConfig.config访问配置值[:键] & TwitterConfig.config [:秘密]。你也可以包含模块,只要注意冲突。
您也可以将这些值加载为全局常量。这感觉有点丑到我虽然:
#config/application.rb
TWITTER_CONFIG = YAML.load_file("config/twitter.yaml")[Rails.env]
血腥的好回答,非常感谢。 – 2010-11-10 14:56:34
它重置变量为零在开发服务器! – 2011-05-20 00:00:14
我在Ruby 1.9.2-p180上使用Rails 3.1应用程序时遇到了一些麻烦。在我的应用程序中,如果我要调用TwitterConfig.method,它只会给我一个错误。但是,如果我检查TwitterConfig.instance_methods,我可以清楚地看到定义的方法。 – Emerson 2011-11-03 03:09:02