[英]Puma failing because request headers are `nil`, but they are present in `env`
兩個應用程序,一個使用 Puma 4.3.4,一個使用 Puma 5.6.4,都開始失敗並出現相同的錯誤:
Read error: #<NoMethodError: undefined method `each' for nil:NilClass>
Puma 5.6.4 沒有提供回溯,但 4.3.4 表明問題出在/usr/local/bundle/gems/puma-4.3.4/lib/puma/server.rb:759
中,這是 Puma 調用headers.each
的地方。
我在這里進入了 Pry,確實headers
是nil
,但我不知道為什么。 今天早些時候這一切都很愉快
如果我檢查HTTP_HOST
env
HTTP_COOKIE
等等。 那么,為什么 Puma 沒有進行通常為handle_request
做准備的任何操作呢?
這些應用程序是 docker-compose 設置的一部分,該設置包括一個代理,但是從它們自己的容器中直接調用應用程序會產生同樣的問題,所以它不是代理剝離標頭(無論如何,如果是這樣,它們會從env
中丟失) .
將 Puma 4.3.4 升級到 5.6.4 並不能解決問題,這也是有道理的,因為 5.6.4 應用程序也被破壞了,我認為這是同樣的問題,盡管沒有回溯我不知道如何驗證這一點。
這些是 Sinatra 應用程序,但我不確定這是否相關——當錯誤發生時,請求似乎還沒有到達堆棧中的那個點。
所以這實際上是自定義中間件中的一個錯誤:當它在某些情況下失敗時,它返回nil
而不是引發異常。
這意味着通常的 Sinatra 或 Sentry 錯誤處理都沒有被觸發,然后他們將空結果傳回給 Puma,然后像上面一樣阻塞。
關鍵是確保中間件在它無法給出響應的所有情況下都引發異常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.