我创建了一个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个小时.... :(任何提示都会非常感激!
答案 0 :(得分:0)
找到答案:要让rails将“app”及其子文件夹添加到autoload_paths,您需要定义一个Engine并确保加载Engine类:
答案 1 :(得分:0)
错误uninitialized constant MyPkg::MyController
仅表示无法加载模块功能而不加载该文件。
查看您的my_controller.rb
是否定义为:
module MyOkg
class MyController < xxx
....
end
end
或
class Mypkg::MyController < xxxx
...
end