代码之家  ›  专栏  ›  技术社区  ›  Kris

有没有办法知道迁移正在运行?

  •  0
  • Kris  · 技术社区  · 6 年前

    我有一个模型,我想在初始值设定项中“注册”有关列的元数据,例如标签、描述。

    作为这一部分,我想检查列是否实际存在,如果不存在,则引发。

    但是,在运行添加列的迁移之前,该列将不存在。

    因此,如果为了迁移而初始化环境,我希望跳过此检查。

    有没有办法知道迁移正在运行?或者 db:migrate rake任务触发了环境加载。。。

    class Preferences < ActiveRecord::Base
      def self.register(attrs)
        raise if migration_not_running? && !column_names.include?(attrs.fetch(:column_name))
        @schema << atrs
      end
    
      def self.schema
        @schema ||= []
      end
    
      private
    
      def self.migration_not_running?
        # ...?
      end    
    end
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Igor Drozdov    6 年前

    当您尝试加载视图时,检查是否有挂起的迁移,就像服务器所做的那样。

    ActiveRecord::Migration.check_pending! ,提高了 ActiveRecord::PendingMigrationError 如果有的话。但它使用 connection.migration_context.needs_migration? 引擎盖下的逻辑,因此可以进行如下检查:

    ActiveRecord::Base.connection.migration_context.needs_migration?
    

    我理解,它并没有直接回答你的问题,但它只是建议了一种可能的替代方案。