1

私は前の質問で提供された解決策に従ってきました:

Controller(Rails 3)のapplication.rbからconfigにアクセスする

ただし、最初に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]

omn​​iauth構成を次のように定義します。

#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:in `[]':シンボルを整数に変換できません(TypeError)

設定ファイルにアクセスするとき、それはシンボルではなく文字列であるべきだと思いましたか?

ヒントをありがとう。

4

1 に答える 1

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

そしてそれはうまくいくでしょう!

于 2012-05-27T04:54:42.660 に答える