我有一个应用程序,它根据子域使用不同的数据库。所以本质上,架构是相同的,但每个数据库的数据会有所不同。但是当我发布一些新功能并且需要一些架构更改时,我需要运行一个命令,该命令将在shards.yml
.
数据库.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'] %>
分片.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
会在所有数据库上迁移