我有一个应用程序,它使用不同的数据库基于子域。因此,从本质上说,模式是相同的,但是每个数据库的数据会有所不同。但是当我发布一些新特性并且需要进行一些模式更改时,我需要运行一个在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
....我使用八达通设置的碎片基于子域,这是很好的工作。我遇到的问题是:
rails db:reset。获取错误ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: cannot drop the currently open databaserails db:migrate发布于 2017-09-20 09:57:24
您必须在迁移中添加using
class CreateComments < ActiveRecord::Migration
using :first, :second
def change
create_table :comments do |t|
t.belongs_to :page, index: true
t.text :body
t.timestamps
end
end
end上面的迁移将同时运行在first和second上。
https://stackoverflow.com/questions/46220136
复制相似问题