35

Ruby on Rails アプリケーションが正常に動作し、データベースに接続されています。今、同じアプリケーションから別のデータベースに接続したいと考えています。データモデルはまったく同じにすることができます。実際、別のデータベースに接続すると、アプリケーションは正常に動作します。ただし、2 つの異なるデータベースに接続したいと考えています。Ruby on Railsでそれは可能ですか?

4

3 に答える 3

77

複数のデータベース接続の場合、次のコードを database.yml ファイルに追加する必要があります。ここでは、Rails アプリケーションから 2 つのデータベースを接続する例を示しています。

config/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

ここでは、開発環境と運用環境に 2 つのデータベースを使用しました。

次に、モデルをデータベースに接続する必要があります。アプリケーションを開発モードと本番モードで実行している場合、すべてのモデルは、database.yml に記載されている開発と本番の db パラメータを介してマップされます。そのため、一部のモデルでは、他のデータベースに接続する必要があります。

User と Category の 2 つのモデルがあるとします。ユーザー テーブルは db1_dev と db1_prod にあり、カテゴリ テーブルは db2_dev と db2_prod にあります。

カテゴリーモデル

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

同様に、2 番目のデータベースに新しい移行を追加する場合は、次のコードを追加する必要があります。

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

  def change
    # your code goes here.
  end
end

それがあなたのために働くことを願っています:)。

于 2013-06-26T06:03:23.207 に答える
21

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(...)
于 2013-06-26T04:27:33.700 に答える