文件更改后,My :: Engine中未初始化的常量

时间:2013-06-24 09:56:45

标签: ruby-on-rails ruby gem railtie

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

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

到目前为止一切正常。

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

uninitialized constant My::Engine

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

我已经查看了autoload_pathswatchable_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

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

1 个答案:

答案 0 :(得分:0)

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