NewRelic::Rack 中间件未公开 Sinatra::Base 设置
NewRelic::Rack middleware not exposing Sinatra::Base settings
我有一个模块化的 Sinatra 应用程序,我在其中使用
run Rack::URLMap
添加各种服务,其中每个服务是一个Sinatra::Base
我在其中一个使用 settings
方法的服务中添加了一个中间件。 NewRelic 机架中间件似乎没有公开此方法。
class MyService < Sinatra::Base
configure do
set :optional_auth, [
{ method: :get, path: ''},
{ method: :get, path: '/:id'},
{ method: :get, path: '/:id/attachments'},
{ method: :get, path: '/:id/comments'}
]
mime_type :json, 'application/json'
use Rack::PostBodyContentTypeParser
use MyMiddleware
end
get '/' ....
在本地,一切正常,但是,部署时,似乎在 NewRelic::Rack 之后添加了 MyMiddleware,因此当调用中间件时,@app 不再是 MyService,它是 NewRelic::Rack 没有公开的 settings
方法。
有没有其他人遇到过这种情况?我是 运行 bundle exec puma
的应用程序
我可以通过更新我的中间件来解决这个问题
def initialize app, &block
@app = app
@block = block
end
def call env
@block.call(env)
do_something(env[:my_middleware_option])
...
@app.call(env)
end
并使用
初始化我的中间件
use MyMiddleware do |env|
env[:my_middleware_option] = "any data type"
end
我有一个模块化的 Sinatra 应用程序,我在其中使用
run Rack::URLMap
添加各种服务,其中每个服务是一个Sinatra::Base
我在其中一个使用 settings
方法的服务中添加了一个中间件。 NewRelic 机架中间件似乎没有公开此方法。
class MyService < Sinatra::Base
configure do
set :optional_auth, [
{ method: :get, path: ''},
{ method: :get, path: '/:id'},
{ method: :get, path: '/:id/attachments'},
{ method: :get, path: '/:id/comments'}
]
mime_type :json, 'application/json'
use Rack::PostBodyContentTypeParser
use MyMiddleware
end
get '/' ....
在本地,一切正常,但是,部署时,似乎在 NewRelic::Rack 之后添加了 MyMiddleware,因此当调用中间件时,@app 不再是 MyService,它是 NewRelic::Rack 没有公开的 settings
方法。
有没有其他人遇到过这种情况?我是 运行 bundle exec puma
我可以通过更新我的中间件来解决这个问题
def initialize app, &block
@app = app
@block = block
end
def call env
@block.call(env)
do_something(env[:my_middleware_option])
...
@app.call(env)
end
并使用
初始化我的中间件 use MyMiddleware do |env|
env[:my_middleware_option] = "any data type"
end