I have been wrestling for a couple of days trying to make my
application work with 2 different databases simultaneously. Finally
got it running but I am a bit disappointed at what I needed to do in
order to make it work. I have a couple case scenarios:
First case scenario:
MySQL A: 6 tables
MySQL B: 1 table
Following instructions from the AWDWR book and any other source of
information I’ve read I add an ActiveRecord::Base.establish_connection() declaration in the model
for the table in MySQL B.
Seems simple, but did not work. I tried adding the connection
parameters inside the model and also using a symbol to reference a
‘database.yml’ entry. Nothing.
Finally, when I was getting ready to ask for help I had the idea that
made it work. I added self.table_name = ‘my_db.my_table_name’ in
every model (including the main DB, named ‘A’ in this example) and
everything started working.
Second case scenario:
MySQL: 6 tables
Oracle: 1 table
Same as above but in addition to adding the self.table_name stuff
I needed to add in every table of the main (MySQL) DB an ActiveRecord::Base.establish_connection() declaration pointing to
either ‘development’, ‘test’ or ‘production’, depending on which DB I
was using.
I thought that Rails would ‘know’ which DB to use. Am I wrong? Should
I have added any type of setup value in ‘environment.rb’/other place
to avoid all this?
Stupid question, did you do: “ActiveRecord::Base.establish_connection”
or did you just call “establish_connection” in your model?
As you might imagine right now, calling
“ActiveRecord::Base.establish_connection” is very different than
calling establish_connection in the model you want to connect to
another database.
For that extra table I used either
ActiveRecord::Base.establish_connection( :ube ) in the model, with the
following in database.yml:
ube:
adapter: mysql
database: ube
user: root
or
ActiveRecord::Base.establish_connection(
:adapter => ‘mysql’,
:database => ‘ube’,
:user => ‘my_user’ )
in the model and no :ube declaration in database.yml
As I understand using ‘establish_connection’ by itself would connect
me to the ‘current’ DB, wouldn’t it?