niedziela, 31 maja 2009

Multiple database connections in Rails with tests and fixtures

Kolejnym problemem okazało sie wykorzystanie fixturek w testach które miały by działać na różnych bazach.

Same fixturki można ładnie rozrzucić po różnych katalogach:
fixtures/
import/
i ładować je przez
fixtures :"import/fixture_name"
jednak domyślnie klasa Fixturek korzysta z ActiveRecord::Base.connection więc cały plan legnie w gruzach.
W tym miejscu na ratunek wychodzi kolejny plugin: use_db
script/plugin install git://github.com/remi/use_db.git
W modelach zamiast estabilish_connection dajemy:
use_db :prefix => "import_", :rails_env => RAILS_ENV.split('_').last
self.abstract_class = true
Plugin ten nadpisuje domyślne ładowanie fixturek i jeśli znajdzie pasujący model do fixturki który korzysta z use_db to wykorzysta Model.connection zamiast AR::Base.connection do operacji ładowania danych.

Co do wypełnienia bazy schemą to wykorzystałem loopy_multiple_databases:
RAILS_ENV=import_development rake db:test:load
niestety w samych testach nie działa odwoływanie się do fixturek przez
fixture_name(:rekord)
więc trzeba rekordy wczytywać ręcznie, ale jeszcze nad tym będę pracował.

Linki:
use_db blog entry
use_db fixed git clone

Brak komentarzy:

Prześlij komentarz