如何在rails 4中的单轨应用程序中访问多个数据库?

时间:2017-11-23 06:11:20

标签: ruby-on-rails ruby-on-rails-4

我是rails的新手,不知道如何在rails单一应用程序中访问多个数据库。

我会这样尝试

配置/ database.yml的

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: root
  socket: /var/run/mysqld/mysqld.sock
  reconnect: true

development:
  <<: *default
  database: connection_development
<<: *default
  database: connection_test

第二个数据库

log_database_production:
  adapter: mysql2
  encoding: utf8
  pool: 5
  host: 192.168.100.97
  port: 3306        #ip address of server with other postgres database
  username: root
  password: root
  database: hrms_development
  reconnect: true

然后我不知道如何继续......

1 个答案:

答案 0 :(得分:3)

对于多数据库连接,您需要将以下代码添加到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中提到的开发和生产数据库参数进行映射。所以对于某些模型,我们需要连接到其他数据库。

让我们假设,我们有两个模型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

希望它对你有用:)。