gpt4 book ai didi

ruby-on-rails - 运行时错误 : can't add a new key into hash during iteration in Rack

转载 作者:行者123 更新时间:2023-12-04 02:28:59 29 4
gpt4 key购买 nike

我构建了一个非常小的 Rails 5.1.4 (Ruby 2.3.1) 应用程序。一旦我将它部署到生产环境中,我就会不时收到这个特定的错误:
RuntimeError: can't add a new key into hash during iteration
指点这里:

# rack/request.rb, line 67
def set_header(name, v)
@env[name] = v
end

我知道,当您尝试在迭代哈希时向哈希添加新键时会发生此错误。自 @env是一个散列,这是有道理的。但:
  • 在堆栈跟踪中,我没有发现任何与 @env 上的迭代相关的内容。 ,这是一个死的简单链 app.call(env)调用。
  • 这个错误并不总是发生,而是一两个小时一次,所以这对我来说也很奇怪
  • 我无法在本地重现它:我尝试加载多个请求命中的服务器,假设这可能是线程安全问题,但在本地它就像一个魅力......

  • 完整的堆栈跟踪仅包含 Rack 中间件,可在此处找到:
    https://gist.github.com/Nattfodd/e513122400b4115a653ea38d69917a9a

    Gemfile.lock:
    https://gist.github.com/Nattfodd/a9015e9204544302bf3959cec466b715

    服务器与 puma 一起运行,配置非常简单:只需线程和工作线程的数量:
    threads 0, 5
    workers 5

    我目前的想法是:
  • 监控 gem 之一有一个错误(哨兵乌鸦,new_relic)
  • concurrent-ruby 有一个错误(我读过一个,但它在 1.0.2 中得到修复,而我用于 Puma 的实际版本是 1.0.5)
  • 一些非常愚蠢的东西,我错过了,但我不知道去哪里看,因为 Controller 的操作包含 3 行代码,并且应用程序配置大多是默认的...
  • 这是与配置相关的东西,因为回溯根本不包含 Controller ...
  • 最佳答案

    你能粘贴完整的堆栈跟踪吗?
    我的假设是 set_header 是从迭代 env 的方法中调用的。

    关于ruby-on-rails - 运行时错误 : can't add a new key into hash during iteration in Rack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47768547/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com