我正在开发一个宝石/引擎。我这样做的方法是将它从源代码捆绑到一个测试 RailsApp 中:
# Gemfile
gem 'my-engine', path: '../local/path/to/gem'
到目前为止,这工作正常。
但是,在我更改我的 gem 中的文件(例如添加空格或中断)之后,引擎被卸载。导致以下错误:
uninitialized constant My::Engine
此错误由第一次调用My::Engine
. (我需要调用它来获取根目录:)My::Engine.root
如果我删除该行,则不会引发错误,但只会呈现一个空页面,这是因为我的所有 SQL 都发生了更改,并且没有从数据库加载任何内容。我认为这是因为lib
目录中的文件已卸载,因为在这些文件中我动态创建活动记录模型..
我已经检查了autoload_paths
and 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
我不确定我是否以正确的方式实施这些,但它们似乎并没有像我使用它们的方式解决我的问题。