【发布时间】:2020-05-23 23:03:36
【问题描述】:
我遇到了一个问题,我们的迁移文件(进行数据更改)依赖于尚未迁移的数据库。
我们正在使用支持多个数据库的 Rails 6:
production:
primary:
database: my_db_name
other:
database: other_db_name
以下是我们的模型示例:
class Product < ApplicationRecord
belongs_to :other
end
class Other < ApplicationRecord
establish_connection: :other
end
当主数据库的迁移尝试使用来自其他数据库的数据时,就会出现问题。
class AddInitialProducts < ActiveRecord::Migration[6.0]
def up
obj = Other.find_by(name: "Special Object")
Product.create(name: "Product", other: obj)
end
def down
# Delete product created above.
end
end
当我从空数据库开始运行rails db:migrate 时,它会首先尝试迁移primary 数据库,但由于other_db_name 尚不存在而失败。尚未迁移。
我知道rails db:schema:load 命令,但我们需要数据存在于我们的应用程序中。这也是所需数据的一个简单示例。应用程序的每个版本之间可能会有数据迁移,因此种子似乎不是一个好主意,因为该文件用于开发/测试。
处理版本之间数据迁移的正确方法是什么?
【问题讨论】:
标签: ruby-on-rails database-migration