在rails上的ruby中连接到多个数据库

我有一个ruby on rails应用程序工作正常并连接到数据库。 现在我想从同一个应用程序连接到不同的数据库。 数据模型可以完全相同。 事实上,如果我连接到不同的数据库,应用程序工作正常。 但是,我想连接到两个不同的数据库。 铁轨上的ruby可以吗?

对于多数据库连接,您需要将以下代码添加到database.yml文件中。 在这里,我举一个从rails应用程序连接两个数据库的例子

配置/ database.yml的

development: adapter: mysql2 database: db1_dev username: root password: xyz host: localhost development_sec: adapter: mysql2 database: db2_dev username: root password: xyz host: localhost production: adapter: mysql2 database: db1_prod username: root password: xyz host: your-production-ip production_sec: adapter: mysql2 database: db2_prod username: root password: xyz host: your-production-ip 

在这里,我使用了两个数据库来开发和生产环境。

现在我们需要将模型连接到数据库。 在开发和生产模式下运行应用程序时,所有模型都将通过database.yml中提到的开发和生产db参数进行映射。 所以对于某些模型,我们需要连接到其他数据库。

让我们假设,我们有两个模型User和Category。 users表位于db1_dev和db1_prod中,db2_dev和db2_prod中的类别表。

分类模型

 class Category < ActiveRecord::Base establish_connection "#{Rails.env}_sec" end 

同样,当您为第二个数据库添加新迁移时,需要向其添加以下代码。

 class CreateRewards < ActiveRecord::Migration def connection ActiveRecord::Base.establish_connection("#{Rails.env}_sec").connection end def change # your code goes here. end end 

希望它对你有用:)。

使用establish_connection切换到其他数据库:

 ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username => "myuser", :password => "mypass", :database => "somedatabase" ) 

您还可以从database.yml传递预配置的环境,如下所示:

 ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env']) 

您也可以为特定型号设置它:

 MyClass.establish_connection(...)