Rails 应用程序:将默认数据添加到生产应用程序的最佳方式是什么
Rails app : What is the best way to add default datas to production application
我有一个用于生产的 Rails 6 应用程序。
当我升级我的应用程序时,我为新表 and/or 列添加了迁移。
如果我必须添加新的默认数据,最好的方法是什么?
我使用种子文件作为初始数据,但是是否有类似迁移(增量)的东西来添加数据?我知道我可以在迁移中添加数据,但我更喜欢另一个地方。
[编辑]
有人知道这个 gem : https://github.com/ilyakatz/data-migrate 吗?
它似乎满足了我的要求。
在一些项目中我们用来将数据更新放入db/data-updates/<UTC TimeStamp>_add_thing.rb
。我们为这些创建了一个自己的生成器,由 rails generate data_update AddThing
调用以创建一个迁移,调用/执行相应更新文件中的内容。
基于此,您可以将这些默认数据放入 db/default-data
中,并使用与新默认值类似的逻辑。
您不需要通过迁移来调用它们,您也可以在不同的环境中 运行 它们作为 rails runner db/default-data/123_xyz.rb
。
但是如果新的默认值对于您的业务逻辑是强制性的,您应该让它们尽可能接近发明迁移!
如果有人正在寻找一个简单的解决方案,data_migrate 正是我想要的。
https://github.com/ilyakatz/data-migrate
数据迁移存储在 db/data 中。
数据迁移包含在模式迁移工作流中,使用简单的命令:
rails db:migrate:with_data
如果你能读懂西班牙语,这是一份关于 data_migrate 的有趣文档:https://la-guia.platan.us/stack/ruby/rails/data_migrate
如果可能,您应该避免在数据迁移中使用 ActiveRecord 模型。模型可能会发生变化,例如,如果您添加了验证,则您的数据迁移可能无法通过。
一个好的解决方案是调用专为数据迁移创建的模型:
class AddVisitorRoleToUsers < ActiveRecord::Migration[6.0]
class MigrationUser < ApplicationRecord
self.table_name = :users
end
def up
MigrationUser.all.each do |user|
user.update!(role: 'visitor')
# This will NOT call User model validations
end
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
我有一个用于生产的 Rails 6 应用程序。 当我升级我的应用程序时,我为新表 and/or 列添加了迁移。
如果我必须添加新的默认数据,最好的方法是什么?
我使用种子文件作为初始数据,但是是否有类似迁移(增量)的东西来添加数据?我知道我可以在迁移中添加数据,但我更喜欢另一个地方。
[编辑] 有人知道这个 gem : https://github.com/ilyakatz/data-migrate 吗? 它似乎满足了我的要求。
在一些项目中我们用来将数据更新放入db/data-updates/<UTC TimeStamp>_add_thing.rb
。我们为这些创建了一个自己的生成器,由 rails generate data_update AddThing
调用以创建一个迁移,调用/执行相应更新文件中的内容。
基于此,您可以将这些默认数据放入 db/default-data
中,并使用与新默认值类似的逻辑。
您不需要通过迁移来调用它们,您也可以在不同的环境中 运行 它们作为 rails runner db/default-data/123_xyz.rb
。
但是如果新的默认值对于您的业务逻辑是强制性的,您应该让它们尽可能接近发明迁移!
如果有人正在寻找一个简单的解决方案,data_migrate 正是我想要的。
https://github.com/ilyakatz/data-migrate
数据迁移存储在 db/data 中。 数据迁移包含在模式迁移工作流中,使用简单的命令:
rails db:migrate:with_data
如果你能读懂西班牙语,这是一份关于 data_migrate 的有趣文档:https://la-guia.platan.us/stack/ruby/rails/data_migrate
如果可能,您应该避免在数据迁移中使用 ActiveRecord 模型。模型可能会发生变化,例如,如果您添加了验证,则您的数据迁移可能无法通过。
一个好的解决方案是调用专为数据迁移创建的模型:
class AddVisitorRoleToUsers < ActiveRecord::Migration[6.0]
class MigrationUser < ApplicationRecord
self.table_name = :users
end
def up
MigrationUser.all.each do |user|
user.update!(role: 'visitor')
# This will NOT call User model validations
end
end
def down
raise ActiveRecord::IrreversibleMigration
end
end