2017-09-14 19 views
11

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à:

  1. Tôi không thể làm rails db:reset. Bắt lỗi ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: cannot drop the currently open database
  2. 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

Trả lời

4

Bạn phải thêm using để di cư của bạn

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 

sự di cư trên sẽ chạy trên cả firstsecond

+0

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. –

Các vấn đề liên quan