为什么添加这样的 Rails 中间件会导致无休止的重定向?

Why is adding a Rails middleware like this causing endless redirects?

我正在尝试将一些中间件添加到我正在处理的 Rails 项目中,当我尝试这样做时,它似乎会导致无限循环。

具体来说,我有以下中间件 shell 文件:

# app/middleware/log_data.rb

class LogData
    def initialize(app)
        @app = app
    end

    def call(env)
        # To-do: Write code here.
    end
end

然后我在app目录下新建了一个middleware目录,并将文件放在那个目录下。

之后,我在 config/application.rb 的底部添加了以下内容:

config.middleware.use("LogData")

在使用 sudo service puma restart 在 Vagrant 上重新启动 Puma 服务器 运行ning 后,如果我 运行 rake middleware,我可以看到中间件正确显示在列表中底部。

但是,当我尝试刷新网站时,它因无限循环而失败,在 Chrome 中显示以下内容:

如果我在 config/application.rb 中注释掉 config.middleware.use("LogData") 行,那么中间件将从 rake middleware 命令列表中消失,网站将停止崩溃并正常加载。

我做错了什么?我错过了什么?我想这很简单,但我不确定为什么一个简单(且为空)的 shell 中间件文件会导致整个站点崩溃。谢谢。

我应该注意,我使用的是 Rails 4.2.11,我知道它很旧,但现在升级不是一个选择。

你的中间件什么都不做,returns nil(转化为不完整的服务器响应),基本上请求到此结束。它需要 return 一些东西([status, headers, response] 的数组,或调用 env)以允许请求通过中间件链。

# app/middleware/log_data.rb

class LogData
  def initialize(app)
    @app = app
  end

   def call(env)
    # To-do: Write code here.
    
    # this should be at the very end of the method
    @app.call(env)
   end
end

Here 是关于中间件的更多信息。