У меня есть приложение rails, которое обращается к двум базам данных: реплика чтения и его собственная база данных, настроенная через стандартный файл database.yml
.
Существуют определенные модели, которые обращаются к реплике чтения, и я использую establish_connection
для динамического переключения на реплику:
class MyReadReplicaDbBase < ActiveRecord::Base
self.abstract_class = true
establish_connection READ_REPLICA_DB
end
class User < MyReadReplicaDbBase
end
Реальные среды хорошо работают с этой настройкой, но при тестировании на travis мне нужно настроить две базы данных, используя такой подход:
language: ruby
cache: bundler
rvm:
- 2.5.1
services:
- docker
- redis-server
env:
global:
- DB_URL=postgres://postgres@localhost/travis_ci_test
- READ_REPLICA_DB_URL=postgres://postgres@localhost/travis_ci_read_replica_test
# https://github.com/travis-ci/travis-ci/issues/9624#issuecomment-389537036
before_install:
- sudo sed -i -e '/local.*peer/s/postgres/all/' -e 's/peer\|md5/trust/g' /etc/postgresql/*/main/pg_hba.conf
- sudo service postgresql restart
- sleep 1
- gem update --system
- gem install bundler
sudo: required
dist: xenial
addons:
postgresql: "10"
apt:
packages:
- postgresql-10
- postgresql-client-10
env:
global:
- PGPORT=5433
before_script:
- cp config/database.yml.travis config/database.yml
- psql -c 'create database travis_ci_test;' -U postgres
- psql -c 'create database travis_ci_read_replica_test' -U postgres
script:
- bundle exec rails db:migrate RAILS_ENV=test
- bundle exec rspec -f d
Существует ли стандартный подход для загрузки схемы в базу данных реплики для тестирования?Могу ли я выполнить что-то вроде следующего?
rake:db:schema:load --database read_replica_db
Я понимаю, что это не сработает, потому что для настройки этой базы данных будет использоваться среда по умолчанию.