Redis
 sql >> Base de données >  >> NoSQL >> Redis

L'utilisation simple de EM::Synchrony#sync provoque l'erreur "fibre racine" FiberError -- ma faute ?

Je pense que votre code peut fonctionner si vous trouvez la bonne version d'em-hiredis qu'il essaie de corriger, c'est un problème avec les dépendances lâches.

Voici un code entièrement fonctionnel mais basé sur la branche master d'em-synchrony :

Gemfile :

source :rubygems

gem 'em-synchrony', :git => "git://github.com/igrigorik/em-synchrony.git"
gem 'em-hiredis', '~> 0.1.0'

test.rb :

require 'rubygems'
require 'bundler/setup'

require 'em-synchrony'
require 'em-synchrony/em-hiredis'

EventMachine.synchrony do
  redis = EM::Hiredis.connect

  redis.set('foo', 'bar')
  puts redis.get('foo')

  EM.stop
end

puis exécutez-le avec :

$ bundle
$ ruby test.rb

Le patching de singe est un moyen intrinsèquement défectueux de patcher les gemmes à moins que vous ne vous assuriez que la version exacte de la gemme que vous avez patchée est utilisée, ce qui est quelque chose que em-synchrony devrait appliquer ou au moins détecter.