【发布时间】:2021-02-09 09:04:22
【问题描述】:
我正在运行 Rails 5.2.0 应用程序。这个LoadError 总是出现在重启或重新编译后的第一个请求中:
Unable to autoload constant Api::V1::ApplesController, expected /fruits_and_vegetables/app/controllers/api/v1/apples_controller.rb to define it
相关文件:
routes.rb
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
get 'apples', to: 'apples#get'
end
end
end
这是文件结构:
- app
- controllers
- api
- v1
- apples_controller.rb
apples_controller.rb 中的内容:
class Api::V1::ApplesController < ApplicationController
// stuff
end
StackOverflow 上的一些帖子表明此错误可能是由我的控制器文件中的拼写错误引起的,但事实并非如此。或者,有些人提到了 Rails 的大小写敏感性。但是,如果我尝试在routes.rb 文件或控制器中将api 和v1 更改为Api 或V1,Rails 将抛出错误。
I saw a comment 建议应该运行rails r 'puts ActiveSupport::Dependencies.autoload_paths',如果我在输出列表中没有看到/fruits_and_vegetables/app/controllers/api,则将config.autoload_paths << Rails.root.join("app/controllers/api") 添加到我的config/application.rb 文件中,但it seems that is discouraged。
有什么想法吗?我在这里看到至少十几个类似的帖子,但似乎没有真正的具体解决方案?
【问题讨论】:
-
你试过这样定义你的控制器吗?:
module Api; module V1; class ApplesController < ApplicationController; end; end; end.在每个;所在的位置添加一个新行,并将其从代码中删除。 -
我刚开始升级到 Rails 5.2.0(从 Rails 5.1.6.2)并且遇到同样的问题(当我的应用程序服务器启动时)。我尝试了上面的建议(通过 fanta,即按行显式命名模块/类),导致相同的错误。
标签: ruby-on-rails api controller autoload