Rails中facebook / twitter的应用程序配置设置

时间:2012-05-27 03:02:44

标签: ruby-on-rails facebook omniauth

我一直在关注上一个问题中提供的解决方案:

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)

我认为在访问配置文件时它应该是字符串而不是符号?

感谢您的任何提示。

1 个答案:

答案 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

它会起作用!