我一直在关注上一个问题中提供的解决方案:
Accessing config from application.rb in Controller (Rails 3)
但首先将其应用于Facebook设置。
我首先创建了facebook配置文件:
#lib/facebook_config.rb
module FacebookConfig
def self.config
@@config ||= {}
end
def self.config=(hash)
@@config = hash
end
端
并定义了我的YAML文件然后初始化它。
#config/facebook.yml
development:
app_id = "id"
app_secret = "secret"
test:
app_id = "id"
app_secret = "secret"
production:
app_id = "id"
app_secret = "secret"
和
#config/intializers/01.facebook_config.rb
require './lib/facebook_config'
FacebookConfig.config = YAML.load_file("config/facebook.yml")[Rails.env]
并定义omniauth配置:
#config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
# The following is for facebook
provider :facebook, FacebookConfig.config[:app_id], FacebookConfig.config[:app_secret], {:scope => 'email, read_stream, read_friendlists, friends_likes, friends_status, offline_access'}
end
然而,当我在开发模式下测试时,启动webrick服务器时出现以下错误:
config / initializers / omniauth.rb:3:在`[]'中:无法将符号转换为整数(TypeError)
我认为在访问配置文件时它应该是字符串而不是符号?
感谢您的任何提示。
答案 0 :(得分:1)
可能的原因可能是因为你的facebook.yml文件格式化。
您可以在此处阅读Yaml:http://en.wikipedia.org/wiki/YAML
我已在虚拟应用中测试了您的代码 - 同样的错误,因为您当前的YAML文件将返回字符串。
1.9.3p0 :014 > YAML.load_file("config/facebook.yml")[Rails.env]
=> "app_id = \"id\" app_secret = \"secret\""
因此您无法通过symbol
访问,因为Ruby认为您正在为Numeric Index
传递String
值。
将你的facebook.yml更新为此(设置你的变量):
#config/facebook.yml
development:
app_id: id
app_secret: secret
test:
app_id: id
app_secret: secret
production:
app_id: id
app_secret: secret
在facebook.yml更新之后,结果你会得到哈希:
YAML.load_file("config/facebook.yml")[Rails.env]
=> {"app_id"=>"id", "app_secret"=>"secret"}
符号化您的配置哈希键:
def self.config=(hash)
@@config = hash
@@config.symbolize_keys!
end
它会起作用!