def inside_rack_middleware
MyModel.update_attributes(:ip => request.ip)
redirect somewhere else
end
这是可能的吗?
def inside_rack_middleware
MyModel.update_attributes(:ip => request.ip)
redirect somewhere else
end
我在 Twitter 上通过 @supercoco9 得到了答案:“如果你的中间件在 Rack/Rails 栈中,你可以通过 AR 直接使用模型”。
是的,你可以从中间件中访问你的AR模型。我在我的中间件中添加了byebug并能够访问我的模型。
编辑:- 所以,我开始编写一个Rack中间件,在我的Rails应用程序中使用。我尝试在中间件中访问我的AR模型,但它的行为非常有趣。在新服务器启动后提供的第一次请求一切都正常。但是在此之后的任何请求都会导致错误:
MyMiddleware的一个副本已从模块树中删除,但仍然处于活动状态
只要停止从中间件中访问AR模型,这个错误就会消失。 我刚开始学习Ruby/Rails,所以我不知道Ruby/Rails/Rack世界中的具体术语。但简单的说,Rack中间件只是一种插拔式库,任何人都可以在任何Rack应用程序中使用。因此,我们不应该依赖于我们中间件内部的任何Rails对象。