$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

rails 3でconfigatronを使う

 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:もし知っていたら教えてください