У меня есть приложение, которое использует разные базы данных на основе субдомена. По сути, схема будет одинаковой, но данные будут различаться для каждой базы данных. Но когда я выпущу некоторые новые функции, и для этого потребуются некоторые изменения схемы, мне нужно будет запустить команду, которая будет работать во всех базах данных, настроенных в shards.yml
.
database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 15
host: localhost
port: 5432
username: postgres
password:
development:
<<: *default
database: app_default
production:
<<: *default
database: app_default
username: <%= ENV['BACKEND_DATABASE_USERNAME'] %>
password: <%= ENV['BACKEND_DATABASE_PASSWORD'] %>
shards.yml
shared: &shared
adapter: postgresql
encoding: unicode
pool: 15
host: localhost
username: postgres
password:
port: 5432
octopus:
environments:
- development
- test
- production
development:
default:
<<: *shared
database: app
first:
<<: *shared
database: first
second:
<<: *shared
database: second
....
test:
test:
host: postgres
adapter: postgresql
database: app_test
production:
default:
<<: *shared
database: app
first:
<<: *shared
database: first
second:
<<: *shared
database: second
....
Я использую Octopus для установки осколка на основе субдомена, который отлично работает. У меня проблемы:
- Я не могу сделать
rails db:reset
. Получение ошибкиActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: cannot drop the currently open database
- Я не могу выполнить
rails db:migrate
, который будет мигрировать во все базы данных