3

我正在开发一个宝石/引擎。我这样做的方法是将它从源代码捆绑到一个测试 RailsApp 中:

# Gemfile
gem 'my-engine', path: '../local/path/to/gem'

到目前为止,这工作正常。

但是,在我更改我的 gem 中的文件(例如添加空格或中断)之后,引擎被卸载。导致以下错误:

uninitialized constant My::Engine

此错误由第一次调用My::Engine. (我需要调用它来获取根目录:)My::Engine.root如果我删除该行,则不会引发错误,但只会呈现一个空页面,这是因为我的所有 SQL 都发生了更改,并且没有从数据库加载任何内容。我认为这是因为lib目录中的文件已卸载,因为在这些文件中我动态创建活动记录模型..

我已经检查了autoload_pathsand 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

我不确定我是否以正确的方式实施这些,但它们似乎并没有像我使用它们的方式解决我的问题。

4

1 回答 1

0

我认为您可能需要在调用 My::Engine.root 之前需要“my/engine”,或者更改您需要的顺序,以便在调用 My::Engine 的文件之前需要“my/engine” .

于 2013-10-17T20:35:07.410 回答