我应该将 Rails 5.1 的中间件文件放在哪里?

Where should I place my middleware file for Rails 5.1?

之前我的中间件在 lib/middleware/my_middle_ware.rb

但是当这样做时,

config.middleware.use MyMiddleWare

我收到了

NameError: uninitialized constant

rails 在哪里寻找中间件?

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

config.middleware.use MyMiddleWare

这应该有效并将 MyMiddleWare 附加到中间件堆栈的底部。

即使在 app/middleware 内容加载之前,如果调用 'config.middleware.use',我想你会得到 'uninitialized Constant error'。下面应该修复

config.middleware.use "MyMiddleWare"

如果以上方法不起作用,则以下方法之一可能是不行的。

Is MyMiddleWare in app/middleware/my_middle_ware.rb ?

Is MyMiddleWare in lib/my_middle_ware.rb ?

看起来 rails 并没有在寻找它。

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

Dir["./lib/middleware/*.rb"].each do |file|
  require file
end

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

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

但不幸的是,即使我添加到 Rails v5.2.2

中的加载路径,app/middlewares 文件夹也没有加载
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 查看中间件堆栈。