今更ながらgemを作ってみる。続き
DB周りのgemを作成しているのですが、railsの場合はDBの接続周りはconf/database.ymlから読みとります。なので、そこを読み取る周りについてです。
railties/lib/rails/application/configuration.rb を参考にしたりしました。
でコードですが、以下です
require 'pathname' module Multidb class Configuration attr_reader :default_pool attr_reader :default_adapter attr_reader :raw_configuration def initialize(default_adapter) # @default_pool = ActiveRecord::Base.connection_pool yaml = Pathname.new("config/database.yml") @default_adapter = default_adapter @raw_configuration = if yaml.exist? require "yaml" require "erb" YAML.load(ERB.new(yaml.read).result) || {} elsif ENV['DATABASE_URL'] # Value from ENV['DATABASE_URL'] is set to default database connection # by Active Record. {} else raise "Could not load database configuration. No such file - #{yaml}" end end end end
マスター・スレーブ対応がしたくて独自で実装しています。で、上のコードではyamlの内容を読み込んで@raw_configurationというhashに値を詰め込んでいます。
ま、もう少し整理する予定ですし、且つrailsのconf/database.ymlをちゃんと見るようにまだ見直す予定ではあります。
もっとスマートなやり方があれば、知りたいです。
では、今日はこんなところで。