hello-world
webエンジニアのメモ。とりあえずやってみる。

Railsで定数を一元管理する(config)

公開日時

Ruby2.1.4, Rails4.1.7で確認

---- 2015/8/23追記 ----

先日、gem名がrails_configからconfigに変更になったようです。

rails以外でも使えるから名前もrailsにとらわれないようにということでしょうか。

gem名がしれっと変わるのはアグレッシブですね。

railsconfig/config

記事内でrails_configと書いていた部分もconfigにリネームしました。

---- 追記ここまで ----

昨年はrailsの定数管理に settingslogicを使用していたのですが、最近は configを使っています。

基本的な使い方はsettingslogicと同じなので乗り換えもしやすいと思います。

  • gem追加
gem 'config'
  • bundle install
bundle install --path vendor/bundler/
  • 初期設定
./bin/rails g config:install

実行すると以下の設定ファイルが追加されます。

      create  config/initializers/rails_config.rb
      create  config/settings.yml
      create  config/settings.local.yml
      create  config/settings
      create  config/settings/development.yml
      create  config/settings/production.yml
      create  config/settings/test.yml
      append  .gitignore

settingslogicの場合は、config/settings.ymlに環境ごとの設定を書いていましたが、configの場合は基本的な設定をconfig/settings.ymlに記述し、環境ごとに異なる設定は別ファイルに記述するようになっています。

管理する値が増えてきた場合はconfigの方が見通しがいいですね。

また、config/settings.local.ymlという設定ファイルが追加されていますが、こちらはローカル環境でdevelopment環境の開発をしている際に、ローカル環境依存の設定を書きたい場合に使います。

例えば環境に応じたURLをsettingsに記述している場合を見てみます。

# config/settings/development.yml
url: 'http://development.url'

この状態で、rails consoleで値を確認すると

./bin/rails c
Loading development environment (Rails 4.1.7)
irb(main):001:0> Settings.url
=> "http://development.url"

development環境なので http://development.url が設定されています。

次にsetting.local.ymlにもurlを設定してみます。

# config/settings.local.yml
url: 'http://local.url'

この状態で、rails consoleで値を確認すると

./bin/rails c
Loading development environment (Rails 4.1.7)
irb(main):001:0> Settings.url
=> "http://local.url"

development環境ですが http://local.url が設定されているのを確認できます。

なお、local.ymlに関してはgenerate時に自動的に.gitignoreに追加されているので、リポジトリに誤ってコミットするミスが防げます。

config/settings.local.yml
config/settings/*.local.yml
config/environments/*.local.yml

これで定数を一元管理できるのでスッキリしますね。

参考


Related #Rails

[rails]ELB使用時にヘルスチェック用のアクションを作成する

ELBにrailsアプリをぶら下げる場合、railsアプリが落ちたらELBから外れてもらいたいです。

[rails]carrierwaveで保存した画像のurlを取得する

carrierwave 0.10.0 で確認 imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。