簡體   English   中英

Puma 失敗,因為請求標頭為“nil”,但它們存在於“env”中

[英]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,確實headersnil ,但我不知道為什么。 今天早些時候這一切都很愉快

如果我檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM