仅在生产中发现控制器问题

Issue finding controller concerns only in production

我的应用程序在 app/controllers/api/V2/concerns

中有许多控制器问题

当我在开发中处理此问题时,一切正常。但是,一旦我推送到生产环境,rails 服务器启动时我会收到以下错误:Uninitialized constant Concerns::MyConcern (NameError)

我的顾虑是这样的:

module Api::V2
  module Concerns
    module MyConcern
      extend ActiveSupport::Concern

      def some_method(some_arg)
        # some stuff here
      end

    end
  end
end

我已经在我的生产和开发环境中设置了 config.eager_load = true 以尝试使它们尽可能一致;但是,在生产中仍然没有看到这个错误。

奇怪的是,如果我注释掉我在控制器中包含问题的区域,应用程序会设法启动;然后,当我转到生产服务器上的 rails 控制台并查看我是否可以访问 Api::V2::Concerns::MyConcern 时,我可以毫无错误地访问它。这让我认为存在某种自动加载问题,在控制器中调用关注点时未加载关注点;但是,我的印象是 Rails 会自动加载 app/ 文件夹中的所有内容,只有 /lib 等区域必须明确添加。

仅供参考,我的控制器位于 app/controllers/api/V2/my_controller.rb

知道这里会发生什么吗?

很可能是您路径中的 V2 组件导致了这里的问题。在不区分大小写的文件系统上,这将被解析为有效的 v2 。在区分大小写的文件系统上,它将寻找不存在的 app/controllers/api/v2/concerns/my_concern.rb,并且不会加载。