在 rails 的现有数据库中填充一些数据的最佳做法

Best practise to populate somedata in a existing database in rails

问题陈述:

假设我通过 rails 迁移在 table table_1 中创建了一个新列 column_1。现在我想将数据填充到 column_1 中进行一些计算,但这是一次性任务。

方法:

是否首选通过迁移来完成。或者我应该将它添加到种子中然后填充它并再次将其删除

或者有没有其他最佳实践。

尽管有不同的方法,但最好在 RakeMigrations[=43= 中进行] 但不是种子。

抽取任务:

通常首选 Rake 任务来对数据集合进行维护或数据迁移作业。

抽成示例:

lib/tasks/addData.rake

  desc "TODO"
  task :my_task1 => :environment do
    User.update_all(status: 'active')
  end

migration中执行的示例:

如果将状态字段添加到 user

class AddStatusToUser < ActiveRecord::Migration
  def up
    add_column :users, :status, :string
    User.update_all(status: 'active')
  end

  def down
    remove_column :users, :status
  end
end

为什么不是种子:

种子一般类似于数据库Dump,种子文件用于在应用程序启动时第一次将数据填充到数据库中。以便使用不同的数据启动应用程序。

例如应用程序设置、应用程序配置、管理员用户等

通常,我们使用 Rails 迁移来迁移我们应用程序的架构,并使用 Rake 任务来迁移我们的生产数据。

只有少数情况下我们使用 Rails 迁移来确保数据迁移作为部署的一部分发生。

在所有其他情况下,使用 Rake 任务为我们提供了更大的灵活性和更少的维护。

查看详细说明here

这实际上是一个基于意见的问题

Is it preferred to do it through migration. or should I add it in seeds and then populate it and remove it back again

这取决于需要多长时间。

1.迁移

如果它是 one-time 任务,则进行迁移,但前提是该任务将 运行 持续 几分钟

2。耙任务

如果任务是 one-time 但可能需要 几个小时 它应该是抽取任务,而不是迁移。

一次性任务?肯定会与 migration 一起使用,因为它只会在迁移发生时执行。之后不会被执行

Rake 任务 被认为太多了,因为您只需要 运行 一次。任务脚本会保留在那里,直到您决定将其删除。但是,这完全没有意义(构建一些将在不久的将来删除的东西,除非在某些特殊情况下出于测试目的)

如果您询问最佳做法,人们往往会采用不同的方法。这将取决于我们试图解决的每个案例。但是,总的来说,有些情况是可以分享的。