问题陈述:
我们说我通过rails migration在表table_1中创建了一个新列column_1。现在我想将数据填充到column_1进行一些计算,但它是一次性任务。
方法:
是否优先通过迁移来实现。或者我应该将它添加到种子中然后填充并再次将其删除
还是有其他最佳做法。
答案 0 :(得分:2)
通常,我们使用Rails迁移来迁移我们的应用程序架构,并使用Rake任务来迁移我们的生产数据。
只有少数情况我们使用Rails迁移来确保数据迁移作为部署的一部分发生。
在所有其他情况下,使用Rake任务为我们提供了更大的灵活性和更少的维护。
查看详细解释here
答案 1 :(得分:1)
即使有不同的方法,最好在 Rake
或 Migrations
中进行,但不要种子。
佣金任务:
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
为什么不是种子:
种子通常类似于数据库转储,种子文件用于在应用程序启动时第一次将数据填充到数据库中。因此应用程序是用不同的数据启动的。
示例包括应用程序设置,应用程序配置,管理员用户等。
答案 2 :(得分:1)
这实际上是一个基于意见的问题
是否优先通过迁移来实现。或者我应该将它添加到种子中然后填充并再次将其删除
这取决于它需要多长时间。
<强> 1。迁移强>:
如果它的一次性任务与迁移相关,但仅当任务将以几分钟运行时。
<强> 2。佣金任务:
如果任务是一次性的,但可能需要几个小时,那么它应该是一个rake任务,而不是迁移。
答案 3 :(得分:0)
一次性任务?肯定会使用迁移,因为它只会在迁移发生时执行。并且之后不会被执行
Rake任务被认为太多,因为您只需要运行一次。任务脚本将保留在那里,直到您决定将其删除。但是,它完全没有意义(建立一些将在不久的将来被删除的东西,除非在某些特殊情况下用于测试目的)
如果您要询问最佳做法,那么人们往往采用不同的方法。这取决于我们试图解决的每个案例。但是,一般来说,有些案例是可以分享的。