【问题标题】:Issue finding controller concerns only in production仅在生产中发现控制器问题的问题
【发布时间】:2016-10-03 20:37:37
【问题描述】:

我的应用程序在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

有什么想法可以在这里发生吗?

【问题讨论】:

  • 重启生产服务器后可以试试吗..?
  • 我试过重启服务器,甚至一起部署到另一个提供商(Heroku)并得到完全相同的错误
  • 这叫my_concern.rb吗?你确定都是小写的?有时您的本地开发系统不区分大小写,而生产则不。
  • 粘贴完整路径到文件,请
  • @tadman 是的,我的所有 6 个问题都会出现此错误。如果我在控制器中注释掉一个,第二个也会出现同样的错误。如果我在注释掉所有“包含”之后rails c 进入应用程序,然后能够访问这些问题,这一事实让我认为这是一些奇怪的加载问题

标签: ruby-on-rails ruby autoload


【解决方案1】:

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

【讨论】:

  • 是的,就是这样。似乎这是 V2 中的一个案例问题,文件系统无法识别大写字母。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2018-05-22
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
相关资源
最近更新 更多