rails3でYAMLから読み込んだ値をグローバルな定数にする
config/api_key.ymlで認証キーを管理して、これをグローバルな定数として使い回したいとする。
consumer_secret : 'xxxxxxxx' consumer_key : 'xxxxxxxxxxxxxx'
railsは起動時にconfig/initializers/以下においたファイルをロードする。
よってconfig/initializer/constants.rb に以下のように書けばいい。
API_KEY = YAML.load_file("#{Rails.root}/config/api_key.yml")
あとはAPI_KEY['consumer_key']な感じで適当に呼び出せる。
Rails.rootのところをRAILS_ROOTとしていたのがハマりポイントでした。
rails3からの変更点のようです。今更気づいたのかって感じですけど。
Ruby on Rails 3.0 Release Notes — Ruby on Rails Guides
Railties now deprecates:
RAILS_ROOT in favor of Rails.root,
RAILS_ENV in favor of Rails.env, and
RAILS_DEFAULT_LOGGER in favor of Rails.logger.
PLUGIN/rails/tasks, and PLUGIN/tasks are no longer loaded all tasks now must be in PLUGIN/lib/tasks.