我正在开发一个宝石/引擎。我这样做的方法是将它捆绑在来自源代码的测试RailsApp中:
# Gemfile
gem 'my-engine', path: '../local/path/to/gem'
到目前为止一切正常。
但是,在我更改gem中的文件(例如添加空格或中断)后,将卸载Engine。导致以下错误:
uninitialized constant My::Engine
第一次调用My::Engine
的文件抛出此错误。 (我需要调用它来获取根目录:My::Engine.root
)如果我删除该行,则不会抛出任何错误,但只会呈现一个空页面,而这种情况正在发生,因为我所有的SQL都发生了变化而没有内容是从数据库加载。我认为这是因为lib
目录中的文件已被卸载,因为在这些文件中我动态创建了活动记录模型..
我已经查看了autoload_paths
和watchable_dirs
:
# engine.rb
module My
class Engine < Rails::Engine
engine_name 'my-engine'
initializer "my-engine.load_config" do |app|
app.config.autoload_paths += %W(#{Engine.root}/lib)
app.config.watchable_dirs["#{Engine.root}/lib"] = [:rb]
end
end
end
我不确定我是否以正确的方式实施这些方法,但它们似乎并没有像我使用它们那样解决我的问题。
答案 0 :(得分:0)
我认为您可能需要在调用My :: Engine.root之前要求'my / engine',或者更改您的要求的顺序,以便在调用My的文件之前需要'my / engine' ::引擎。