[Ruby on Rails 5] config にアプリ固有の値を定義する

YAML 設定ファイルに持たせた値を活用する。

railsconfig/config v1.4.0 が Rails v5.1 でうまく動かなかったので、マニュアルで設定を追加します。

設定ファイルの作成

config/initializers に、YAML ファイルを読み込むスクリプトを用意します。

config/initializers/my_config.rb
file = File.read("#{Rails.root}/config/my_config.yml")
MY_APP = YAML.safe_load(file, [], [], true)[Rails.env]

config/ に、固定値を設定する YAML ファイルを用意します。
COMMON には全ての環境で共通する設定を持たせます。

config/my_config.yml
COMMON: &COMMON
  code: 'foo'
development:
  bar: 'dev'
  <<: *COMMON
test:
  bar: 'test'
  <<: *COMMON
production:
  bar: 'prod'
  <<: *COMMON

例えば view 内で MY_APP['code'] のように設定値を利用することができます。

app/views/items/index.html.haml
= check_box_tag :search, MY_APP['code'], true, class: 'form-check-input'

このあたりは「Ruby on Rails 5アプリケーションプログラミング」を参考にさせて頂きました。

Ruby on Rails 5アプリケーションプログラミング
山田 祥寛
技術評論社
売り上げランキング: 12,115

YAML.safe_load

当初 YAML.load(file) を利用していたのですが、bbatsov/rubocopYAML.safe_load を使うように言われました。
置き換えるとエラーが発生するので調べると、#safe_load は引数の指定が違いました。

config/initializers/my_config.rb
file = File.read("#{Rails.root}/config/my_config.yml")
MY_APP = YAML.safe_load(file, [], [], true)[Rails.env]

こちらが参考になりました。