迁移后重新加载 rails 环境

reload rails environment after migrations

我有一些定义模型的数据迁移。例如:

db/migrate/19600000000000_some_migration.rb:

class Step < ActiveRecord::Base
end

class SomeMigration < ActiveRecord::Migration
  def change
    # operations requiring the Step class
  end
end

当我 运行 在迁移后立即播种时

rake db:migrate db:seed

重新定义的Stepclass还在记忆中。但是我需要最初在 app/models/step.rb 中定义的 Step class 因为我的种子依赖那里的一个方法,否则它会默默地失败。

有几个我能想到的,但都不理想:

  1. require 'app/models/step.rb' 播种前
    • 这对我来说真的不起作用,因为它依赖于另一个也在迁移中重新定义的模型,这可能会变成一个兔子洞。
  2. Dir["#{File.dirname(__FILE__)}/app/models/**/*.rb"].each { |f| load(f) }
    • 我也不喜欢这个,因为它正在重新定义常量
  3. 总是运行rake db:migraterake db:seed分别

我试过寻找在播种后重新加载整个环境的方法,但它们似乎都不起作用:

对最具可扩展性的方法有什么想法吗?

试试这个

class SomeMigration < ActiveRecord::Migration
  class Step < ActiveRecord::Base
  end

  def change
    # operations requiring the Step class
  end
end