迁移后重新加载 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
重新定义的Step
class还在记忆中。但是我需要最初在 app/models/step.rb
中定义的 Step
class 因为我的种子依赖那里的一个方法,否则它会默默地失败。
有几个我能想到的,但都不理想:
require 'app/models/step.rb'
播种前
- 这对我来说真的不起作用,因为它依赖于另一个也在迁移中重新定义的模型,这可能会变成一个兔子洞。
Dir["#{File.dirname(__FILE__)}/app/models/**/*.rb"].each { |f| load(f) }
- 我也不喜欢这个,因为它正在重新定义常量
- 总是运行
rake db:migrate
和rake db:seed
分别
我试过寻找在播种后重新加载整个环境的方法,但它们似乎都不起作用:
ActionDispatch::Reloader.cleanup!
Rack::Reloader.new(MyApp).reload!
对最具可扩展性的方法有什么想法吗?
试试这个
class SomeMigration < ActiveRecord::Migration
class Step < ActiveRecord::Base
end
def change
# operations requiring the Step class
end
end
我有一些定义模型的数据迁移。例如:
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
重新定义的Step
class还在记忆中。但是我需要最初在 app/models/step.rb
中定义的 Step
class 因为我的种子依赖那里的一个方法,否则它会默默地失败。
有几个我能想到的,但都不理想:
require 'app/models/step.rb'
播种前- 这对我来说真的不起作用,因为它依赖于另一个也在迁移中重新定义的模型,这可能会变成一个兔子洞。
Dir["#{File.dirname(__FILE__)}/app/models/**/*.rb"].each { |f| load(f) }
- 我也不喜欢这个,因为它正在重新定义常量
- 总是运行
rake db:migrate
和rake db:seed
分别
我试过寻找在播种后重新加载整个环境的方法,但它们似乎都不起作用:
ActionDispatch::Reloader.cleanup!
Rack::Reloader.new(MyApp).reload!
对最具可扩展性的方法有什么想法吗?
试试这个
class SomeMigration < ActiveRecord::Migration
class Step < ActiveRecord::Base
end
def change
# operations requiring the Step class
end
end