Forum: Ruby on Rails Connect multiple DB in rails project using AR

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Af3cecc8af253b5acd3c09c5b67c0074?d=identicon&s=25 Valentino Lun (on9west)
on 2009-01-13 11:46
Dear all

I have a rails project which database connection is defined in
database.yml. There is a table call "servers" which have about 40
records, which is a collection of database setting (i.e. Server.name,
Server.port, Server.host)

I know the way to establish multiple connection as below...

class A < ActiveRecord::Base
end
A.establish_connection(a) # a is the database config

class B < ActiveRecord::Base
end
B.establish_connection(b) # b is the database config

# repeat and repeat.......


However, how can I do this in a block? I have no idea to do so...Please
give me some light.

all_servers = Server.find(:all)
all_servers.each do |s|
   h = {:host => "localhost",
        :adapter => "jdbc",
        :dialect => "sybase",
        :autocommit => false,
        :driver => "com.sybase.jdbc3.jdbc.SybDataSource",
        :url => "jdbc:sybase:Tds:#{s.host):#{s.port}/LOE_DB",
        :username => "username",
        :password => "password"}

   # How to I write code to establish 40 connections using active record
here??
   # class "Server.name" < ActiveRecord::Base
   # end
   # "Server.name".establish_connection(h)

end

Million thanks
Valentino
6bf9328eef0afadd9c9d05334f8dd42b?d=identicon&s=25 Hubert Lepicki (hubertlepicki)
on 2009-01-14 00:17
(Received via mailing list)
Hi,

not sure what and *why* are you trying to do so, but looks like you
might want to use some simple metaprogramming to create model classes.

For example:
all_servers = Server.find(:all)
all_servers.each do |s|
   h = {:host => "localhost",
        :adapter => "jdbc",
        :dialect => "sybase",
        :autocommit => false,
        :driver => "com.sybase.jdbc3.jdbc.SybDataSource",
        :url => "jdbc:sybase:Tds:#{s.host):#{s.port}/LOE_DB",
        :username => "username",
        :password => "password"}


   eval("class #{Server.name} < ActiveRecord::Base\
           end")
   eval(Server.name).establish_connection(h)

end

A hack but should work more or less...

On 13 Sty, 11:46, Valentino Lun <rails-mailing-l...@andreas-s.net>
Af3cecc8af253b5acd3c09c5b67c0074?d=identicon&s=25 Valentino Lun (on9west)
on 2009-01-14 02:42
Hubert Lepicki wrote:
>
>    eval("class #{Server.name} < ActiveRecord::Base\
>            end")
>    eval(Server.name).establish_connection(h)
>
> end
>
> A hack but should work more or less...
>

Thanks for your help
The reason I used this approach is I am building a dashboard application
to monitor over 40 data servers. I need to extract a lot of information
in those servers and display it through web.

If this approach is not appropriate, could someone suggest alternatives
to me?

Million thanks
Valentino
This topic is locked and can not be replied to.