Padrinoでの設定情報の管理法

Padrinoで設定情報を管理する良さ気な方法がないか調べた。

何個かPadrinoを使ったアプリのソースを見てみたけど、@udzuraのhaircutで実装されたやり方が一番しっくりきたのでメモっておく。

設定ファイル(YAML)の作成

config/配下に設定ファイル(YAML)を配置する。 ここではファイル名をconfig/config.yamlとする。

:development:
  :hoge: a
:test:
  :hoge: b
:production:
  :hoge: c

設定ファイル読み込みクラスの作成

設定ファイルを読み込むConfigクラスをlib/config.rbとして作成する。

module PadrinoApp
  class Config
    CONF = YAML.load(open(Padrino.root("/config/config.yml").read)

    def self.[](key)
      CONF[key]
    end
  end
end

ConfigクラスのPadrino起動時の読み込み

config/boot.rb内に以下の記述を追加。

Padrino.before_load do
  # do something...

  require 'config'
end

これで自動的にlib/config.rbが読み込まれる。

Controller/ViewでのConfigクラスの呼び出し

PadrinoApp::Config[:key]でControllerからでもViewからでもConfig情報を読み出せる。

PadrinoApp::App.controllers :test do
  get :index do
    puts PadrinoApp::Config[:development][:hoge] # => a
  end
end