Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Einfache Verwendung von EM::Synchrony#sync verursacht 'root fiber' FiberError -- meine Schuld?

Ich denke, Ihr Code kann funktionieren, wenn Sie die richtige Version von em-hiredis finden, die es zu patchen versucht, das ist ein Problem mit losen Abhängigkeiten.

Hier ist ein voll funktionsfähiger Code, der jedoch auf dem Master-Zweig von em-synchrony basiert:

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

und führen Sie es dann mit:

aus
$ bundle
$ ruby test.rb

Monkey-Patching ist eine von Natur aus fehlerhafte Art, Edelsteine ​​zu patchen, es sei denn, Sie stellen sicher, dass die genaue Version des Edelsteins, den Sie gepatcht haben, verwendet wird, was etwas ist, was em-synchrony erzwingen oder zumindest erkennen sollte.