Ruby on Railsアプリケーションは正常に動作し、データベースに接続されています。同じアプリケーションから別のデータベースに接続したいです。データモデル実際、異なるデータベースに接続する場合、アプリケーションは正常に動作しますが、2つの異なるデータベースに接続したいのです。Ruby on rails?
複数のデータベース接続の場合、次のコードを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パラメーターを介してマップされます。したがって、一部のモデルでは、他のデータベースに接続する必要があります。
仮定すると、ユーザーとカテゴリの2つのモデルがあります。 usersテーブルはdb1_devとdb1_prodにあり、categoryテーブルはdb2_devとdb2_prodにあります。
カテゴリーモデル
class Category < ActiveRecord::Base
establish_connection "#{Rails.env}_sec"
end
同様に、2番目のデータベースに新しい移行を追加する場合、次のコードを追加する必要があります。
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(...)