1

我们在生产环境中使用带有 eventmachine(em-synchrony)的 Fiber 已经很长时间了,而且效果很好。我们使用过时的 ruby​​ 1.9.3 和 ActiveRecord 3.x 超过 2 年。我们正在将这两个主要部分迁移到最新版本。

在尝试将 ruby​​ 升级到最新版本时,我们fiber called across stack rewinding barrier (FiberError)在 2.0+ 中遇到了异常,但在 1.9.3 中没有。你们能帮我们解决这个问题吗?

最小样本:

测试.rb

autoload :User, './user.rb'

f = Fiber.new do
  p User
end
f.resume
f.resume

用户.rb

class User
end

Fiber.yield # This line is important

$ rvm 1.9.3,2.0,2.1 do sh -c 'echo ==== $RUBY_VERSION; ruby test.rb'
==== ruby-1.9.3-p551
User
==== ruby-2.0.0-p598
user.rb:4:in `yield': fiber called across stack rewinding barrier (FiberError)
    from user.rb:4:in `<top (required)>'
    from test.rb:4:in `block in <main>'
==== ruby-2.1.5
user.rb:4:in `yield': fiber called across stack rewinding barrier (FiberError)
    from user.rb:4:in `<top (required)>'
    from test.rb:4:in `block in <main>'

更多示例代码在这个 repo 中:

https://github.com/qqshfox/test_fiber

任何帮助,将不胜感激!

4

0 回答 0