Railsで環境ごとの設定をYAMLから読み込む


Ruby on Railsで環境ごとの設定をYAMLに読み込むコードです。

🚌 initializers/load_config.rb

initializers/load_config.rbでYAMLの設定を読み込んでRails.application.configに設定する手順です。

def load_config(key, filepath)
yml = YAML.load_file(filepath).symbolize_keys
raise "No such file #{filepath}" if yml.blank?
config = yml[Rails.env.to_sym]
raise "No such environment #{Rails.env} on #{filepath}" if config.blank?
Rails.application.config.send("#{key}=", ActiveSupport::InheritableOptions.new(config.deep_symbolize_keys))
end
load_config(:examle, Rails.root.join('config', 'example.yml'))

🐠 config/example.yml

設定値の書かれたYAMLを設置します。

default: &default
message: "hoge"
development:
<<: *default
production:
<<: *default
message: "fuga"

🐝 Rails内での利用方法

Ruby on Rails内で実際に利用する手順はこちら。

$ rails console RAILS_ENV=development
> Rails.application.config.example.message # => "hoge"
$ rails console RAILS_ENV=production
> Rails.application.config.example.message # => "fuga"

🗽 補足:database.ymlとDATABASE_URLの変換

config/database.ymlから、DATABASE_URLを生成するための方法です。事前にgem install database_urlで「database_url - GitHub」を追加します。

require 'database_url'
c = YAML.load_file('/path/to/config/database.yml')
=> {"development"=>{"adapter"=>"mysql2", "database"=>"myapp_development", "username"=>"root", "password"=>"password", "encoding"=>"utf8"}, "test"=>{"adapter"=>"mysql2", "database"=>"myapp_test", "username"=>"root", "password"=>"password", "encoding"=>"utf8"}, "production"=>{"adapter"=>"mysql2", "database"=>"myapp", "username"=>"myapp", "password"=>"XXX", "encoding"=>"utf8"}, "cucumber"=>{"adapter"=>"mysql2", "database"=>"myapp_cucumber", "username"=>"root", "password"=>"password", "encoding"=>"utf8"}}
DatabaseUrl.to_active_record_url(c['development'])
=> "mysql2://root:password@127.0.0.1/myapp_development?encoding=utf8"

🏈 補足:RailsのDBの設定値の取得

次のコマンドで、Railsの現在の設定値を取得できます。

db_config = Rails.configuration.database_configuration
db_username = db_config[Rails.env]["username"]
db_password = db_config[Rails.env]["password"]

🍣 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)