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