【发布时间】:2021-03-20 19:05:37
【问题描述】:
我正在尝试将一些中间件添加到我正在处理的 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服务器后,如果我运行rake middleware,我可以看到中间件正确地显示在底部的列表中。
但是,当我尝试刷新网站时,它会因无限循环而失败,并在 Chrome 中显示以下内容:
如果我注释掉config/application.rb 中的config.middleware.use("LogData") 行,那么中间件将从rake middleware 命令列表中消失,网站停止崩溃并正常加载。
我做错了什么?我错过了什么?我想这很简单,但我不确定为什么一个简单的(和空的)shell 中间件文件会导致整个站点崩溃。谢谢。
我应该注意我使用的是 Rails 4.2.11,我知道它很旧,但现在升级不是一个选项。
【问题讨论】:
-
请展示
call(env)的样子。问题可能就在那里。 -
我上面写的就是我所拥有的。我试图在继续之前先设置一个外壳,但外壳原样使一切崩溃。我尝试添加一个随机模型提取(如
User.find(1)),但这似乎没有什么区别。 -
让我们将
@app.call(env)放入def call(env)。我会在你检查后添加答案。
标签: ruby-on-rails vagrant middleware puma