【问题标题】:Best practise to populate somedata in a existing database in rails在 Rails 中的现有数据库中填充一些数据的最佳实践
【发布时间】:2018-04-05 07:04:12
【问题描述】:

问题陈述:

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

方法:

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

或者有没有其他最佳做法。

【问题讨论】:

  • 最佳实践是通过 rake 任务来完成此类工作。你可以在那里进行任何类型的计算。
  • 是的,但是 rake 任务用于重复的事​​情,但这只会发生一次。

标签: ruby-on-rails rails-migrations


【解决方案1】:

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

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

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

详细解释见here

【讨论】:

    【解决方案2】:

    即使有不同的方法,最好在 RakeMigrations 中执行此操作,而不是种子。

    Rake 任务:

    通常首选 Rake 任务来执行维护或数据迁移作业而不是数据集合。

    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,种子文件用于在应用程序启动时第一次将数据填充到数据库中。以便使用不同的数据启动应用程序。

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

    【讨论】:

      【解决方案3】:

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

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

      这取决于需要多长时间。

      1.迁移

      如果是一次性任务,请使用迁移,但前提是任务要运行 几分钟

      2。耙任务:

      如果任务是一次性的,但可能需要 几个小时,则它应该是 rake 任务,而不是迁移。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 同意,但如果您要遍历包含数百万条记录的表,则不推荐
        • 好吧,我相信,在某些情况下,我们无法一次性满足所有要求。它解决了问题并随后引发了性能问题。没有什么是完美的
        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        相关资源
        最近更新 更多