我想基於響應主體的大小有條件地允許Rack::Deflater
,就像這樣:機架:: Deflater和機架:: URLMap
use Rack::Deflater, :if => lambda { |*, body| body.map(&:bytesize).reduce(0, :+) > 512 }
如果我裏面插入我的機架應用之一Rack::Deflater
中間件,這個lambda工作正常; body
是一串字符串。但是,如果我在Rack::URLMap
(config.ru
)之前插入Rack::Deflater
中間件,則不會;因爲body
現在是一個Rack::BodyProxy
對象。
我查看了Rack::BodyProxy
的定義,看起來有點不透明。沒有一個明確的方法來解決這個對象的實際身體; body.body
返回nil
。在這種情況下,最簡單/最好的方式決定響應體的大小,而不是將Rack::Deflater
中間件向下移動到每個Rack應用程序中?
tl; dr:如何確定給定Rack::BodyProxy
對象的響應主體的大小?