我的gem中的app / controllers未添加到autoload_paths

时间:2014-09-15 23:47:26

标签: ruby-on-rails ruby devise

我创建了一个Gem(一个Devise扩展)。在这个Gem中,我添加了由app放在app / controllers文件夹下的控制器。所以我的文件夹结构如下:

app/
  |_ controllers/
                |_ my_pkg/my_controller.rb
lib/
   |_my_gem.rb // somewhere in this file I added the routes.

然而,当我测试时出现错误:

uninitialized constant MyPkg::MyController

我最好的猜测是我的Gem的“app / controllers”没有添加到Rails autoload_paths。

我尝试了几种解决方案,但没有一种能够解决问题:

  • 更改了gemspec:spec.require_paths = [“lib”] - > spec.require_paths = [“lib”,“app / controllers”]

  • 更改了gemspec:删除行:spec.platform = Gem :: Platform :: RUBY#删除此行导致“app / controllers”出现在$ LOAD_PATH中。但问题没有解决。

现在已经挣扎了12个小时.... :(任何提示都会非常感激!

2 个答案:

答案 0 :(得分:0)

找到答案:要让rails将“app”及其子文件夹添加到autoload_paths,您需要定义一个Engine并确保加载Engine类:

Rails 3 controller from plugin

答案 1 :(得分:0)

错误uninitialized constant MyPkg::MyController仅表示无法加载模块功能而不加载该文件。

查看您的my_controller.rb是否定义为:

module MyOkg
  class MyController < xxx
    ....
  end
end

class Mypkg::MyController < xxxx
  ...
end