Connecting to multiple databases in rails

Hi
When strting my application I have three text boxes Username,
password and company name
A user on providing all these goes to user controller login_process
action…That means in my application database.yml have no relevance .It
is as
def login_process
ActiveRecord::Base.establish_connection(
:adapter => ‘postgresql’,
:host => ‘192.168.1.9’,
:username => ‘postgres’,
:password => ‘password’,
:database => ‘gatekeeper’
)
@the_site = Site.find_by_site_code(params[:company][:whichCompany])

#This sites table contains information of to which different databases
to connect,the adapter using,IPaddress of database server etc based on
company

ActiveRecord::Base.establish_connection(
:adapter => @the_site.db_adapter,
:host => @the_site.db_host,
:username => @the_site.db_user,
:password => @the_site.db_pw,
:database => @the_site.db_name
)
-----code continues
end
So what I am doing is suppose a user say user1 with password pass1
and gives company1 then it first connects to gatekeeper database and
from that based on site code gets adapter,host,db_user,db_pw and db_name
information and reconnected to that db as above…And I could
successfully do it
Now my problem is suppose a second user say user2 with passord
pass2 and company company2 connects to the server what happens is now
the already logined first user’s (user1) database connection information
changes to that of second That is the last login users information…
I think I can make you understand the problem…Please help…Why
this happens…How to solve this?

Thanks in advance
Sijo

Create a seperate rails application for handling the login /
gatekeeper interaction. On successful login, pass the details of the
database connection to another rails application and store these
values in the session of the second application and use it to
establish connections.

For security, get the session id of the user upon successful login
from the first application and pass that on to the secondary
application. You could use a table in the gatekeeper database to
store the session information without worrying about cookies. This
needs more analysis though.

Hi
Thanks for the reply…Just to ask is this the only solution
available?
Sijo

You could maintain a lookup hash in your session with the user_id and
the db_connect parameters and do a connect / disconnect before a DB
operation which is a nightmare for performance. I will be interested
to know about alternative approaches.

Hi Sijo,

Thanks for the reply…Just to ask is this the only solution
available?

You could look into Dr. Nic’s Magic Multi-Connections [1] or setup
multiple database connections in config/database.yml. From the top of my
head I don’t know how to use the latter, but you could look into how
Mephisto [2] does it.

[1] http://magicmodels.rubyforge.org/magic_multi_connections/
[2] http://mephistoblog.com/


Roderick van Domburg
http://www.nedforce.nl