Ruby on Rails アプリケーションが正常に動作し、データベースに接続されています。今、同じアプリケーションから別のデータベースに接続したいと考えています。データモデルはまったく同じにすることができます。実際、別のデータベースに接続すると、アプリケーションは正常に動作します。ただし、2 つの異なるデータベースに接続したいと考えています。Ruby on Railsでそれは可能ですか?
3 に答える
複数のデータベース接続の場合、次のコードを 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
それがあなたのために働くことを願っています:)。
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(...)