gpt4 book ai didi

ruby-on-rails - 如何访问 Rack 中间件的特定实例?

转载 作者:行者123 更新时间:2023-12-05 01:22:26 25 4
gpt4 key购买 nike

在我的 Rails 3.2 应用程序中,我必须在某个类类型的中间件实例上调用一个方法。

我尝试使用 Rails.application.middleware但这不起作用,因为它只包装中间件类而不是它们的实例。

现在我正在从 Rails.application.app 开始走中间件链使用 Ruby 的 instance_variable_getis_a? ,但这感觉不对,尤其是因为没有指定的中间件存储上下文的方式。例如 Rack::Cache::Context将下一个实例存储在名为 @backend 的变量中而大多数其他人使用 @app .

有没有更好的方法来查找中间件实例?

最佳答案

您可以让中间件将自身添加到 Rack 环境中,如下例所示:

require 'rack'

class MyMiddleware
attr_accessor :add_response
def initialize app
@app = app
end
def call env
env['my_middleware'] = self # <-- Add self to the rack environment
response = @app.call(env)
response.last << @add_response
response
end
end

class MyApp
def call env
env['my_middleware'].add_response = 'World!' # <-- Access the middleware instance in the app
[200, {'Content-Type'=>'text/plain'}, ['Hello']]
end
end

use MyMiddleware
run MyApp.new

关于ruby-on-rails - 如何访问 Rack 中间件的特定实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12227633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com