Przeczytałem w dokumentacji, jak to zrobić, ale w praktyce mam problemy. W mojej aplikacji mam 2 różne bazy danych, jak opisano poniżej w pliku database.yml.Jak korzystać z wielu baz danych w aplikacji Railsowej Używając database.yml
sqlite_test:
adapter: sqlite3
database: db/sqlite_test.sqlite3
table: plots
pool: 5
timeout: 5000
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: test
pool: 5
username: myname
password: mypassword
host: localhost
Moja aplikacja jest dynamicznym ploter, który będzie wykreślić dane w bazie danych (podstawowego) bez wiedzy whats w bazie danych, czy jak jej struktury. Obie te bazy danych zawierają różne dane. Baza danych SQLite, którą utworzyłem w oddzielnej aplikacji Rails.
Obecna aplikacja, której używam, zbudowana jest wokół bazy danych MYSQL, którą buduję zewnętrznie. Skopiowałem bazę danych SQLite do katalogu/db. Tak więc w moim głównym modelu, kiedy mówię:
class Plot < ActiveRecord::Base
establish_connection :development
set_table_name "stock_test"
set_primary_key :id
Wszystko działa dobrze i elegancko. Jednak, kiedy go zmienić na:
establish_connection :sqlite_test
set_table_name "plots"
i próbują uzyskać dostęp do bazy danych za pośrednictwem konsoli Rails, otrzymuję błąd mówiąc:
>>ActiveRecord::AdapterNotSpecified: database configuration does not specify adapter
Nie wiem, dlaczego tak jest, skoro plik database.yml wyraźnie nie określa adapter? Kiedy jednak robię to ręcznie w moim modelu, wszystko działa dokładnie tak, jak powinno.
class Plot < ActiveRecord::Base
establish_connection(:adapter => "sqlite3", :database => "db/sqlite_test.sqlite3", :pool => 5)
Dlaczego to wszystko działa, kiedy ręcznie określić co jest w database.yml, ale nie wtedy, gdy po prostu użyć odniesienie database.yml?
Dzięki!
czy to nie działa, jeśli masz dwa 'development:' z różnymi kluczami/wartościami? – vol7ron