ruby-on-rails Unicorn + Rails 7.1:TypeError:错误的参数类型strio(预期的strio)(TypeError)

8mmmxcuj  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(38)

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中实现的.
是什么原因导致了这个问题,我该如何进一步调试它?

fquxozlt

fquxozlt1#

我有一个类似的问题(虽然与彪马服务器).它看起来像:

[timestamp] Listen loop: #<TypeError: wrong argument type strio (expected strio)>

字符串

  • (注:花点时间欣赏这条信息的纯粹愚蠢)*

这个问题是在例行的bundle更新后出现的,只更新了一堆小版本的东西,只影响了“裸金属”mac的开发-- docker和Linux都很好。
原因是debug gem(当然,我们的开发/测试组中有)有irb的依赖关系。irb在1.7.x和1.10.x之间的某个点添加了对rdoc的依赖关系。rdoc依赖于psychpsych依赖于strio。我们暂时通过添加一个直接依赖于irb(在开发/测试组中),并将其固定到~> 1.7以防止它在上面。这从我们的依赖关系树中删除了rdocpsychstrio
注意事项:我们没有费心去检查这是一个irb 1.8,1.9还是1.10的变化,所以我们很可能安全地使用1.8或1.9,我只是没有特别关心。
所以这个:

group :development, :test do
  gem 'debug', '~> 1.8'
end


变成了:

group :development, :test do
  gem 'debug', '~> 1.8'
  gem 'irb', '~> 1.7'
end


希望这也是你的问题,因为这是互联网上唯一的地方,我甚至发现有人讨论这种类型的错误。

相关问题