使用`autoload`的光纤问题:`光纤跨越堆栈重绕屏障(FiberError)`

时间:2014-11-27 05:07:34

标签: ruby fiber em-synchrony

我们在生产中使用带有eventmachine(em-synchrony)的光纤 env很长一段时间,而且效果很好。我们使用过时的 ruby 1.9.3和ActiveRecord 3.x超过2年。我们正在迁移那些 最新版本的两个重要部分。

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

最小样本:

test.rb

autoload :User, './user.rb'

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

user.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>'

此回购中有更多示例代码:

https://github.com/qqshfox/test_fiber

任何帮助将不胜感激!

0 个答案:

没有答案
相关问题