Проблема с волокном при `autoload`: ` волокно вызвано через барьер перемотки стека (FiberError)`

Мы используем волокно с eventmachine (em-synchrony) в нашей производственной среде довольно долго, и это работает очень хорошо. Мы используем устаревшие ruby ​​1.9.3 и ActiveRecord 3.x более 2 лет. Мы переносим эти две большие части в последние версии.

При попытке обновить ruby ​​до последней версии мы получили исключение fiber called across stack rewinding barrier (FiberError) в 2.0+, но не в 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 ответов

Другие вопросы по тегам