User我正在使用Unicorn Web服务器运行一个大型Rails应用程序。从rails 7.0升级到7.1后,我遇到以下问题:
以下是通过Unicorn运行时每个请求都会发生的错误:
127.0.0.1 - - [29/Nov/2023:09:53:30 +0100] "GET / HTTP/1.1" 500 51908 0.0197
TypeError: wrong argument type strio (expected strio) (TypeError)
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/lint.rb:390:in `external_encoding'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/lint.rb:390:in `check_input'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/lint.rb:332:in `check_environment'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/lint.rb:57:in `response'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/lint.rb:35:in `call'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/show_exceptions.rb:27:in `call'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/common_logger.rb:43:in `call'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/chunked.rb:102:in `call'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/rack-3.0.8/lib/rack/content_length.rb:20:in `call'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
/Users/me/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/Users/me/installs/ruby/3.2.2/bin/unicorn:25:in `load'
/Users/me/installs/ruby/3.2.2/bin/unicorn:25:in `<main>'
字符串
所有请求都会发生这种情况。我当然尝试过将Unicorn从https://yhbt.net/unicorn.git更新到最新的master,将rack更新到最新的版本。据我所知,在Google上没有匹配的搜索结果“错误的参数类型strio”。我也无法在unicorn邮件列表中找到任何相关的细节:https://yhbt.net/unicorn-public/也无法在https://github.com/rack/rack/issues上找到任何相关的内容
在这里调用external_encoding方法时似乎失败了,https://github.com/rack/rack/blob/f6c583adb0e863e524bacedaf594602964e01078/lib/rack/lint.rb#L393C59-L393C76该方法是在C中实现的.
是什么原因导致了这个问题,我该如何进一步调试它?
1条答案
按热度按时间fquxozlt1#
我有一个类似的问题(虽然与彪马服务器).它看起来像:
字符串
这个问题是在例行的bundle更新后出现的,只更新了一堆小版本的东西,只影响了“裸金属”mac的开发-- docker和Linux都很好。
原因是
debug
gem(当然,我们的开发/测试组中有)有irb
的依赖关系。irb
在1.7.x和1.10.x之间的某个点添加了对rdoc
的依赖关系。rdoc
依赖于psych
,psych
依赖于strio
。我们暂时通过添加一个直接依赖于irb
(在开发/测试组中),并将其固定到~> 1.7
以防止它在上面。这从我们的依赖关系树中删除了rdoc
,psych
和strio
。注意事项:我们没有费心去检查这是一个irb 1.8,1.9还是1.10的变化,所以我们很可能安全地使用1.8或1.9,我只是没有特别关心。
所以这个:
型
变成了:
型
希望这也是你的问题,因为这是互联网上唯一的地方,我甚至发现有人讨论这种类型的错误。