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.