Rails でアプリ固有の設定情報や定数を定義する

gem を使わずに Rails でアプリ固有の設定情報や定数をグローバルに定義するには、app/config/initializers ディレクトリ以下に、設定用のファイルを作成するのが一般的なようです。また、development, test, production など環境で使う値を変更する場合は、設定用の yaml ファイルを作成すると、ruby コード側で Rails.env.production? で判定してやる必要がなくなり楽ができます。

スポンサーリンク

— 環境 —
rails-4.0.1

例えば、外部ウェブサービスの Web API を利用する際に、development 環境と production 環境で API key を使い分ける場合など。

【追記 2014/07/11】
Rails4.1からデフォルトで config/secrets.yml というファイルが用意されており、アプリケーションに固有な定数はそちらで定義したほうが良いかと思います。詳しくは以下のページなどを参考にお願いします。
config/secrets.yml / Ruby on Rails 4.1 Release Notes — Ruby on Rails Guides
Rails4.1のsecrets.ymlはfigaroと違うの? – PILOG
【追記ここまで】

settings.yml に環境ごとの設定を作成

app/config/settings.yml

これで、development, test, production と環境ごとに異なる値を設定できます。

initializers 以下に設定情報を読み込むファイルを作成

app/config/initializers/00_load_config.rb

YAML.load_file で、作成した設定情報用の yaml ファイルを読み込みます。この時、Rails.env をハッシュのキーとして渡しておく。

環境で異なる値を使う必要がない場合は、00_load_config.rb に直接定数を定義します。例として、SOME_CONSTANT を作成しました。

最後に rails でコンソール(pry)を起動して確認してみました。

settings.yml に書いた、development 環境の値が返されています。APP_CONFIG[“キー”] で参照できます。また、SOME_CONSTANT も期待したとおりの値が返されています。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!