Railsでsettingslogicを使った時のメモ

RailsなどでWebアプリケーションを作成する際、環境に依存する値を扱う必要が生じた時は、
settingslogicというgemを使うと便利です。
このgemを使えば、設定ファイル用のyamlファイルをRubyから簡単に扱う事ができます。

Railsの場合、以下の手順でアプリケーションにsettingslogicを組み込む事が出来ます。

  • Gemfileにsettingslogic追加
  • yamlファイルを適当なファイル名でconfigディレクトリ配下に作成
  • Settingslogicクラスを継承したクラスを定義
  • アプリケーションにSettingslogicを使ったコードを記述

Gemfileにsettingslogic追加

Gemfileにsettingslogicを追加します。

1
gem 'settingslogic'

追加後は、bundle installを忘れずに。

1
$ bundle install

yamlファイルの作成

configディレクトリ配下に、application.ymlなど、好きな名前でyamlファイルを作成します。

1
$ vi config/application.yml

database.yml等と同様に、productionやdevelopmentなどの環境に応じて設定を分けることができます。

application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
production:
  aws:
    access_key_id:  xxxxxxxxxxxxxxx
    secret_access_key: yyyyyyyyyyyyyyyyyy
  log_dir: /tmp/log

development:
  aws:
    access_key_id:  xxxxxxxxxxxxxxx
    secret_access_key: yyyyyyyyyyyyyyyyyy
  log_dir: ~/log

test:
  aws:
    access_key_id:  xxxxxxxxxxxxxxxxx
    secret_access_key: yyyyyyyyyyyyyyyyyy
  log_dir: ~/test_log

Settingslogicクラスを継承したクラスを定義

Settingslogicクラスを継承したクラスを、適当な場所に定義します。

1
$ vi lib/settings.rb

sourceにファイル名、namespaceにproductionやdevelopmentなどの環境が指定されるようにしています。

settings.rb
1
2
3
4
class Settings < Settingslogic
  source "#{Rails.root}/config/application.yml"
  namespace Rails.env
end

アプリケーションにコードを記述

アプリケーション側からは、設定ファイルから読み込んだ値をこんな感じで使えます。

1
2
3
4
require 'settings'

AWS.config(:access_key_id     => Settings.aws.access_key_id,
           :secret_access_key => Settings.aws.secret_access_key,

Comments