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

时间:2017-06-21 23:56:32

标签: ruby-on-rails ruby ruby-on-rails-5 ruby-on-rails-5.1

以前我在lib / middleware / my_middle_ware.rb

下有我的中间件

然而,当这样做时,

config.middleware.use MyMiddleWare

我收到了

NameError: uninitialized constant

rails在哪里寻找中间件?

5 个答案:

答案 0 :(得分:6)

看起来铁路还没有找到它。

我必须做以下工作才能发挥作用。

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

答案 1 :(得分:1)

我认为您希望将中间件添加到config/application.rbconfig/environments文件中。

config.middleware.use MyMiddleWare

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

答案 2 :(得分:0)

即使在加载app / middleware内容之前,如果' config.middleware.use'被称为,我认为你得到了未初始化的常量错误'。以下应该修复

config.middleware.use "MyMiddleWare"

如果上述方法无效,则以下其中一项可能为“否”。

Is MyMiddleWare in app/middleware/my_middle_ware.rb ?

Is MyMiddleWare in lib/my_middle_ware.rb ?

答案 3 :(得分:0)

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

答案 4 :(得分:0)

创建一个文件夹values-it-land\strings.xml ,并在此文件夹中创建中间件文件。

但不幸的是,即使我已将app/middlewares的文件夹添加到app/middleware的加载路径中,也无法加载文件夹{p>

Rails v5.2.2

因此您可以按如下所示明确使用require,在config.autoload_paths << "#{Rails.root}/app/middlewares" config.eager_load_paths << "#{Rails.root}/app/middlewares"

中添加此行
application.rb

并加载中间件:

require_relative '../app/middlewares/my_middleware'

并调用config.middleware.use MyMiddleware 来查看中间件堆栈。