rails 2では普通に使えたconfigatronが、3では強引にやらないとできなかったのでメモしておきます。
configatronとは
configatronとは、rubyアプリケーション内で設定を簡単に作り、どこからでも使うように出来るライブラリです。railsでは実行環境によって設定項目を作る事も出来ます。ローカル環境と本番環境でリンク先を変えたいという時などに便利なライブラリです。
例えばRailsでconfig/config.ymlに以下のように書きます。
production: hoge: hoge_production fuga: fuga_production development: hoge: hoge_development fuga: fuga_development test: hoge: hoge_test fuga: fuga_test
その後コントローラから以下のように呼び出す事が可能になります。呼び出された設定は環境ごとに設定した項目を返してくれます(-e productionならhoge_production, -e developmentならhoge_developmentみたいに)。
def index @hoge = configatron.hoge @fuga = configatron.fuga end
rails 3にインストール
まずconfigatronをgemからインストールします。
sudo gem install configatron
次にrailsアプリケーション直下のディレクトリで、configatron-railsプラグインをインストールします。
rails plugin install http://github.com/raavin/configatron-rails.git
以前のバージョンだとこの後に次のコマンドでconfigを自動的に作ってくれましたが、rails3だとそれがうまく行きませんでした。railsコマンドのgenerateはrails2の時と見ているgeneratorファイルが違うのかもしれません*1。
ruby script/generate config
ただ、このgeneratorファイルを除いてみたら、config/config.ymlとconfig/initializers/load_config.rbを生成しているだけだったので、この二つのファイルをコピーします。
# config/config.yml production: site_name: Test Site admin_email: admin@test.com site_url: http://localhost:3000/ development: site_name: Test Site admin_email: admin@test.com site_url: http://localhost:3000/ test: site_name: Test Site admin_email: admin@test.com site_url: http://localhost:3000/
# config/initializers/load_config.rb configatron.configure_from_yaml("#{RAILS_ROOT}/config/config.yml", :hash => Rails.env)
以上でrails 3でもconfigatronが使えるようになります。
*1:もし知っていたら教えてください