Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails &引用;无法自动加载常量“;Rails 5.2.0中的Bug_Ruby On Rails_Api_Controller_Autoload - Fatal编程技术网

Ruby on rails &引用;无法自动加载常量“;Rails 5.2.0中的Bug

Ruby on rails &引用;无法自动加载常量“;Rails 5.2.0中的Bug,ruby-on-rails,api,controller,autoload,Ruby On Rails,Api,Controller,Autoload,我正在运行Rails 5.2.0应用程序。此LoadError总是在重新启动或重新编译后的第一次请求时出现: 无法自动加载常量Api::V1::ApplesController,应为/fruits\u and\u vegets/app/controllers/Api/V1/apples\u controller.rb来定义它 相关文件: routes.rb Rails.application.routes.draw do namespace :api do namespace :v1

我正在运行Rails 5.2.0应用程序。此
LoadError
总是在重新启动或重新编译后的第一次请求时出现:

无法自动加载常量Api::V1::ApplesController,应为/fruits\u and\u vegets/app/controllers/Api/V1/apples\u controller.rb来定义它

相关文件:

routes.rb

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      get 'apples', to: 'apples#get'
    end
  end
end
module Api
  module V1
  end
end
以下是文件结构:

 - app
  - controllers
   - api
    - v1
     - apples_controller.rb
苹果控制器.rb中有什么

class Api::V1::ApplesController < ApplicationController
   // stuff
end
class Api::V1::ApplesController
StackOverflow上的一些帖子表明,这个错误可能是由我的控制器文件中的输入错误引起的,但事实并非如此。或者,一些人提到了Rails的案例敏感性。但是,如果我试图在
routes.rb
文件或控制器中将
api
v1
更改为
api
v1
,Rails将抛出错误

建议运行
rails r'puts ActiveSupport::Dependencies.autoload_path'
,如果我在输出列表中没有看到
/fruits_and_vegets/app/controllers/api
,那么添加
config.autoload_path我的旧版rails 5.1应用程序代码也会出现同样的(LoadError)错误,当我将Rails升级到5.2.0版时。修复(对我来说)是添加一个丢失的源文件,该文件仅定义一个子模块(以满足自动加载程序的要求)。我将在原始post示例的上下文中解释修复

在最初的帖子中,
ApplesController
V1
命名空间的一部分。问题是,
V1
子模块没有(明确)定义。解决方案是在正确的(自动加载)路径上创建一个文件,该文件定义
V1
模块:

app/controllers/api/v1.rb

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      get 'apples', to: 'apples#get'
    end
  end
end
module Api
  module V1
  end
end
显然,从Rails5.2开始,自动加载程序需要显式定义每个模块名称空间。您可以阅读有关的技术详细信息


还有一个。

您是否尝试过这样定义控制器?:
模块Api;模块V1;类ApplesController
。添加新行,其中每个
是,并将其从代码中删除。我刚刚开始升级到Rails 5.2.0(从Rails 5.1.6.2),并且有相同的问题(当我的应用程序服务器启动时)。我尝试了上面的建议(由fanta提出,即通过行显式地命名模块/类),这导致了相同的错误。Jeff,v1.rb文件应该是api目录的子目录还是v1目录的子目录?那么,是api目录的子目录(还是v1目录的同级目录)?或者,v1目录的子目录(以及apples_controller.rb文件的同级目录)?再次感谢您的帮助正如上面的答案所示,
v1.rb文件
位于
api目录
(以及
v1目录
)。