Tôi có một ứng dụng sử dụng cơ sở dữ liệu khác nhau dựa trên tên miền phụ. Về cơ bản, lược đồ sẽ giống nhau, nhưng dữ liệu sẽ khác nhau đối với mỗi cơ sở dữ liệu. Nhưng khi tôi phát hành một số tính năng mới và nó sẽ yêu cầu một số thay đổi lược đồ, tôi sẽ cần chạy một lệnh chạy trên tất cả các cơ sở dữ liệu được cấu hình trong shards.yml
.Làm thế nào để làm đường ray db: di chuyển trên nhiều mảnh mà không phải là mối quan hệ nô lệ chủ cùng một lúc trên đường ray?
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
....
Tôi đang sử dụng Octopus để thiết lập các mảnh dựa trên tên miền phụ, trong đó hoạt động tốt. Các vấn đề tôi gặp phải là:
- Tôi không thể làm
rails db:reset
. Bắt lỗiActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: cannot drop the currently open database
- tôi không thể làm
rails db:migrate
đó sẽ di chuyển trên tất cả các cơ sở dữ liệu
Cảm ơn bạn đã dành thời gian trả lời câu hỏi. Thật không may, giải pháp này vẫn không giải quyết được lỗi 'rails db: reset'. Mặc dù điều này có thể chỉ làm việc cho các mảnh được chỉ định, tôi đã tìm kiếm các di chuyển được áp dụng cho tất cả các phân đoạn. –