Rails上でActiveRecordを使うとconfig/database.ymlを読み取ってよしなにestablish_connetion
をしてくれるけど、
そこら辺の処理を自分でやりたい場合にはRailtieのイニシャライザを上書きする必要がある。
ActiveRecord 3.2.3だと active_record/railtie.rb のなかに次のようなコードがある。
initializer "active_record.initialize_database" do |app|
ActiveSupport.on_load(:active_record) do
self.configurations = app.config.database_configuration
establish_connection
end
end
このactive_record.initialize_database
というイニシャライザを config/application.rb のあたりで置き換えてやる。
場所はif defined?(Bundler)
の下あたり(で動いてる)。
ActiveRecord::Railtie.initializers.delete_if do |i|
i.name == "active_record.initialize_database"
end
module ActiveRecord
class Railtie < Rails::Railtie
initializer "active_record.initialize_database", after: "active_record.set_configs" do |app|
ActiveSupport.on_load(:active_record) do
# ここにやりたいことを書く
end
end
end
end
ちなみにこのように置き換える場合はinitializer
メソッドの:before
もしくは:after
が必要っぽい。
これがないとtopological sort failed
という例外が投げられる。
なのでバージョンによってactive_record/railtie.rb
を読んで、前後のイニシャライザからここの値を指定してやる。