我尝试将安装任务添加到我的可安装引擎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
显然它是在没有文件的情况下加载的,应该急切加载。但为什么呢?
答案 0 :(得分:1)
在种子方法中,您需要
require_relative '../lib/units'
或可能
require_relative '../lib/units/engine'
然后你应该像以前一样命名空间。
我认为这与rails的线程安全特性有关,但更多的技术原因超出了我的范围。