在播种db时,Rails引擎不会急切地加载应用程序文件

时间:2014-10-13 08:26:48

标签: ruby-on-rails ruby load rails-engines seed

我尝试将安装任务添加到我的可安装引擎units

任务加载种子,在里面清除一些表:

# lib/tasks/units_tasks.rake
namespace :units
  task :install do
    Units::Engine.load_seed
  end
end

# db/seeds.rb
Units::Item.delete_all
...

当我从命令行调用任务时

$ bundle exec rake units:install
# => NameError: uninitialized constant Units::Item

发动机像往常一样需要(并且宝石本身可以正常工作 除上述情况外的依赖关系。)

# lib/units.rb
require 'units/engine'
module Units
end

# lib/units/engine.rb
module Units
  class Engine < ::Rails::Engine
    isolate_namespace Units
  end
end

显然它是在没有文件的情况下加载的,应该急切加载。但为什么呢?

1 个答案:

答案 0 :(得分:1)

在种子方法中,您需要

require_relative '../lib/units'

或可能

require_relative '../lib/units/engine'

然后你应该像以前一样命名空间。

我认为这与rails的线程安全特性有关,但更多的技术原因超出了我的范围。