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:
<<:< span> *default

production:
<<:< span> *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"]

🎉 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍