私は、次を介してこれを達成:
各Rails.envため#{Rails.env}_read
と#{Rails.env}_write
database.yml
を作成します。書き込みデータベースを#{Rails.env}
と設定して、移行を実行できるようにしました。
def connect_to_read_db
DatabaseConnector.connect_to_db('read')
end
def connect_to_write_db
DatabaseConnector.connect_to_db('write')
end
クラスやスワッピングを担当するメソッドを作成します。
は、適切な接続を指し、各コントローラ機能のフックの前に追加します。
class DatabaseConnector
class << self
def connect_to_db(function)
if !(Rails.env.development? || Rails.env.test?)
if ActiveRecord::Base.connection_config[:function] != function
Rails.logger.debug "Gathering DB details"
seed_file = Rails.root.join('config', 'database.yml')
loaded_yml_file = YAML::load_file(seed_file)
connection_name = "#{Rails.env}_#{function}"
Rails.logger.debug "attempting connection to: #{connection_name}"
db_details = loaded_yml_file[connection_name]
Rails.logger.debug "database details:"
db_details.each do |d|
Rails.logger.debug(d)
end
ActiveRecord::Base.establish_connection(
adapter: db_details['adapter'],
port: db_details['port'],
pool: db_details['pool'],
timeout: db_details['timeout'],
encoding: db_details['encoding'],
host: db_details['host'],
database: db_details['database'],
username: db_details['username'],
password: db_details['password']
)
end
end
end
end
end
いくつかのデータベースドライバライブラリが異なるデータベースに読み書きクエリをルーティングできるように、使用しているデータベース(mysql、postgresなど)を指定すると便利です(MySQLコネクタJavaはこれを行うことができます)。 – thewmo