13

以前我在 lib/middleware/my_middle_ware.rb 下有我的中间件

然而,在这样做的时候,

config.middleware.use MyMiddleWare

我收到一个

NameError: uninitialized constant

rails 在哪里寻找中间件?

4

5 回答 5

10

看起来 Rails 不是在寻找它。

我必须执行以下操作才能使其正常工作。

Dir["./lib/middleware/*.rb"].each do |file|
  require file
end
于 2017-06-22T14:25:56.610 回答
3

创建一个文件夹app/middlewares并在此文件夹中创建您的中间件文件。

但不幸的app/middleware是,即使我添加到加载路径中,s 文件夹也没有加载Rails v5.2.2

config.autoload_paths << "#{Rails.root}/app/middlewares"
config.eager_load_paths << "#{Rails.root}/app/middlewares"

所以你可以像下面这样显式使用require,在里面添加这一行application.rb

require_relative '../app/middlewares/my_middleware'

并加载中间件:

config.middleware.use MyMiddleware

并调用rake middleware以查看中间件堆栈。

于 2019-09-25T12:14:10.593 回答
2

我相信您想将中间件添加到您config/application.rbconfig/environments文件中。

config.middleware.use MyMiddleWare

这应该可以工作并附MyMiddleWare加到中间件堆栈的底部。

于 2017-06-22T01:39:04.063 回答
1

如果调用“config.middleware.use”,甚至在加载应用程序/中间件内容之前,我认为您会收到“未初始化的常量错误”。下面应该修复

config.middleware.use "MyMiddleWare"

如果上述方法不起作用,则以下其中一项可能是否。

Is MyMiddleWare in app/middleware/my_middle_ware.rb ?

Is MyMiddleWare in lib/my_middle_ware.rb ?
于 2017-06-22T02:32:48.510 回答
0

将中间件作为字符串替换为config/application.rb常量config/environment/{environment}为我解决了这个问题

于 2019-03-27T16:28:59.757 回答