无法自动加载常数控制器(生产中)。开发没有错误

Kum*_*mar 5 ruby amazon-web-services ruby-on-rails-4

文件名 -

app/controllers/invoice/inventory/department/pharmacy_invoices_controller.rb

文件内容-

class Invoice::Inventory::Department::PharmacyInvoicesController < ApplicationController
...
end
Run Code Online (Sandbox Code Playgroud)

我在开发中没有收到错误,但在生产中却收到此错误 -

F, [2016-04-25T13:08:00.754597 #13500] FATAL -- :
LoadError (Unable to autoload constant Invoice::Inventory::Department::PharmacyInvoicesController, expected /xxxxxx/yyyyyyy/app/controllers/invoice/inventory/department/pharmacy_invoices_controller.rb to define it):
Run Code Online (Sandbox Code Playgroud)

我做了 ssh 并检查了服务器上的每个文件。这和开发是一样的,这是显而易见的。我不明白为什么它会在生产中抛出这样的错误。

Ben*_*key 1

Rails 文档中对此进行了介绍,特别是在Autoloading 和 Reloading Constants以及Nesting中。

这是因为定义嵌套可以通过两种方式完成,并且在 Rails 的看待方式方面有很大不同。您可以使用以下方法检查Module.nesting

module Foo
  class Bar
    Module.nesting
  end
end
=> [Foo::Bar, Foo]

class Foo::Bar
  Module.nesting
end
=> [Foo::Bar]
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多信息,我推荐 Simon Coffey 写的这篇非常好的博客文章:Rails Autoloading Hell