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

use*_*970 32 database connection ruby-on-rails

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

Bac*_*uty 74

对于多数据库连接,您需要将以下代码添加到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
Run Code Online (Sandbox Code Playgroud)

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

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

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

分类模型

class Category < ActiveRecord::Base
  establish_connection "#{Rails.env}_sec"
end
Run Code Online (Sandbox Code Playgroud)

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

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

  def change
    # your code goes here.
  end
end
Run Code Online (Sandbox Code Playgroud)

希望它能为你工作:).

  • 在Rails 5.1上,我必须象征连接名称.`establish_connection"#{Rails.env} _sec".to_sym` (5认同)

Pin*_*nyM 19

使用establish_connection切换到不同的数据库:

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

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

ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env'])
Run Code Online (Sandbox Code Playgroud)

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

MyClass.establish_connection(...)
Run Code Online (Sandbox Code Playgroud)