在 rails 的现有数据库中填充一些数据的最佳做法
Best practise to populate somedata in a existing database in rails
问题陈述:
假设我通过 rails 迁移在 table table_1 中创建了一个新列 column_1。现在我想将数据填充到 column_1 中进行一些计算,但这是一次性任务。
方法:
是否首选通过迁移来完成。或者我应该将它添加到种子中然后填充它并再次将其删除
或者有没有其他最佳实践。
尽管有不同的方法,但最好在 Rake
或 Migrations
[=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 任务 被认为太多了,因为您只需要 运行 一次。任务脚本会保留在那里,直到您决定将其删除。但是,这完全没有意义(构建一些将在不久的将来删除的东西,除非在某些特殊情况下出于测试目的)
如果您询问最佳做法,人们往往会采用不同的方法。这将取决于我们试图解决的每个案例。但是,总的来说,有些情况是可以分享的。
问题陈述:
假设我通过 rails 迁移在 table table_1 中创建了一个新列 column_1。现在我想将数据填充到 column_1 中进行一些计算,但这是一次性任务。
方法:
是否首选通过迁移来完成。或者我应该将它添加到种子中然后填充它并再次将其删除
或者有没有其他最佳实践。
尽管有不同的方法,但最好在 Rake
或 Migrations
[=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 任务 被认为太多了,因为您只需要 运行 一次。任务脚本会保留在那里,直到您决定将其删除。但是,这完全没有意义(构建一些将在不久的将来删除的东西,除非在某些特殊情况下出于测试目的)
如果您询问最佳做法,人们往往会采用不同的方法。这将取决于我们试图解决的每个案例。但是,总的来说,有些情况是可以分享的。