Ruby on Rails sets up the connection depending on your application’s database.yml file. In database.yml file you set up configration environmentwise.
As I active record allow to access single database but you want to access more than one databases than it required to have multiple connection at a time. Now you think that how this possible. So Rails provides gem to implement you need. Follow the below steps:
1. Install gem
sudo gem install magic_multi_connections
2. After installing gem there is one patch required in connected.rb(/usr/lib/ruby/gems/1.8/gems/magic_multi_connections-1.2.1/lib/magic_multi_connections/connected.rb)
replace
raise NameError.new ( "uninitialized constant # (const_id)") unless
target_class
with
return unless target_class
3. Now edit the config/database.yml file to create some more databases:
development:
adapter: mysql
encoding: utf8
database: app_development
username: tester
password: testerpwd
host: localhost
development_clonex:
adapter: mysql
encoding: utf8
database: appx_development
username: tester
password: testerpwd
host: localhost
Default in rails main application database has read-write permission , and the other databases than you default application database have read-only pemission.
4. Now in environment.rb ,you have to add end of environment.rb:
require 'magic_multi_connections'
connection_names = ActiveRecord::Base.configurations.keys.select do |name|
name =~ /^#{ENV['RAILS_ENV']}_clone/
end
@@connection_pool = connection_names.map do |connection_name|
Object.class_eval <<-EOS
module #{connection_name.camelize}
establish_connection :#{connection_name}
end
EOS
connection_name.camelize.constantize
end
5. Next, you create same clone for databases which you have access by following below steps.
cp config/environments/development.rb config/environments/development_clonex.rb
6. Now, You want to migrate the new databaseclone than only follow below step.
rake db:migrate RAILS_ENV=development_clonex
7. Lets check whether multiple pool created or not and we are able to access data from different database or not through console.
$ ruby script/console
· Check for connection pool
>> @@connection_pool
=> [DevelopmentClonex]
As we create clonex than it listed here. If you create more than one then you have array with multiple clone.
Now access table from other database by
>> DevelopmentClonex::Model_name.model_methods
Example: @users = DevelopmentClonex::User.find(:all)
puts'qadexnsdev', @users.size ##It access database 1
@uses = User.find(:all)
puts'qadex_test', @uses.size ##It access database 2
Now use other features of multi_magic_connection.
Hope this article will help you. If you have any suggestion or query than just leave comment here.
Sathis is Ruby on rails Project Lead in chennai,4 + years experience in ror.
As I active record allow to access single database but you want to access more than one databases than it required to have multiple connection at a time. Now you think that how this possible. So Rails provides gem to implement you need. Follow the below steps:
1. Install gem
sudo gem install magic_multi_connections
2. After installing gem there is one patch required in connected.rb(/usr/lib/ruby/gems/1.8/gems/magic_multi_connections-1.2.1/lib/magic_multi_connections/connected.rb)
replace
raise NameError.new ( "uninitialized constant # (const_id)") unless
target_class
with
return unless target_class
3. Now edit the config/database.yml file to create some more databases:
development:
adapter: mysql
encoding: utf8
database: app_development
username: tester
password: testerpwd
host: localhost
development_clonex:
adapter: mysql
encoding: utf8
database: appx_development
username: tester
password: testerpwd
host: localhost
Default in rails main application database has read-write permission , and the other databases than you default application database have read-only pemission.
4. Now in environment.rb ,you have to add end of environment.rb:
require 'magic_multi_connections'
connection_names = ActiveRecord::Base.configurations.keys.select do |name|
name =~ /^#{ENV['RAILS_ENV']}_clone/
end
@@connection_pool = connection_names.map do |connection_name|
Object.class_eval <<-EOS
module #{connection_name.camelize}
establish_connection :#{connection_name}
end
EOS
connection_name.camelize.constantize
end
5. Next, you create same clone for databases which you have access by following below steps.
cp config/environments/development.rb config/environments/development_clonex.rb
6. Now, You want to migrate the new databaseclone than only follow below step.
rake db:migrate RAILS_ENV=development_clonex
7. Lets check whether multiple pool created or not and we are able to access data from different database or not through console.
$ ruby script/console
· Check for connection pool
>> @@connection_pool
=> [DevelopmentClonex]
As we create clonex than it listed here. If you create more than one then you have array with multiple clone.
Now access table from other database by
>> DevelopmentClonex::Model_name.model_methods
Example: @users = DevelopmentClonex::User.find(:all)
puts'qadexnsdev', @users.size ##It access database 1
@uses = User.find(:all)
puts'qadex_test', @uses.size ##It access database 2
Now use other features of multi_magic_connection.
Hope this article will help you. If you have any suggestion or query than just leave comment here.
Sathis is Ruby on rails Project Lead in chennai,4 + years experience in ror.
No comments:
Post a Comment