環境 ( development, test, production) 毎に異なる定数の管理を、簡単に行う事が出来る、rails_config という gem をインストール・設定を行う。
GitHub リポジトリ rails_config
(https://github.com/railsconfig/rails_config)
※ インストールの方法から、利用方法までは上記 GitHub に全てまとまっています。
前提
バージョン | |
---|---|
Ruby | 2.1.1 |
Rails | 4.2.0 |
rails_config | 0.4.2 |
1. インストールと初期化
Gemfile へ rails_config を追記
gem 'rails_config'
Gemfile をインストール。
( rails プロジェクト内に閉じた状態で gem をインストールしたいため --path オプションを利用。 )
$ bundle install --path vendor/bundle
デフォルトの初期ファイルセットを作成する。
$ bundle exec rails g rails_config:install
以下のファイルが作成されます。
config/initializers/rails_config.rb
下記の YAML をパースした定義にアクセスするためのクラス。
デフォルトは Settings という名前となっている。
config/settings.yml
全ての環境で共通して利用する設定
config/settings.local.yml
ローカル環境のみで利用する設定
( バージョン管理の対象外 )
config/settings/development.yml
開発環境のみで利用する設定
config/settings/production.yml
本番環境のみで利用する設定
config/settings/test.yml
テスト環境のみで利用する設定
また、.gitignore に以下の記述が追記されます。
config/settings.local.yml
config/settings/*.local.yml
config/environments/*.local.yml
これによって config/settings.local.yml がコミットの対象外となります。
ローカルで開発を行っているような場合に、誤ってコミットされる事が無くなるので、その環境独自の設定も気兼ねなく記述する事が出来ます。
同じ設定を複数のファイルで記述した際の読み込みの優先度としては以下のようになります。
settings.local.yml > ( production.yml, test.yml, development.yml ) > settings.yml
2. 設定ファイルへの記述
view のセレクトボックスへセットする値を設定ファイルで管理する想定。
cuisine_type:
'1': '和食'
'2': '中華'
'3': 'イタリアン'
3. 参照元の記述
view ファイル (ERB) で、実際に上記の設定を呼び出す例。
<p>
<strong>Cuisine type:</strong>
<%= Settings.cuisine_type[ @store.cuisine_type ] %>
</p>
実際の戻り値は RailsConfig::Options クラスのインスタンスのため、Hash のメソッドを利用したい場合は to_h してから。
※ form のセレクトボックスへ値をセットする際等。
<div class="field">
<%= f.label :cuisine_type %><br>
<%= f.select :cuisine_type, Settings.cuisine_type.to_h.invert %>
</div>
4. おまけ
同じような機能を提供してくれる gem として settingslogic があります。
rails_config と違って、1 つのファイル内へ production, test, development の定義を記載するため、規模の小さなアプリケーションの場合は settingslogic のほうが見通しが良くなるかもしれません。