我们在生产环境中使用带有 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
任何帮助,将不胜感激!