[REDIS] 내 잘못 - EM ::의 Synchrony # 싱크 원인 '루트 섬유'FiberError의 간단한 사용?
REDIS내 잘못 - EM ::의 Synchrony # 싱크 원인 '루트 섬유'FiberError의 간단한 사용?
이 프로그램
require 'em-synchrony' ## v1.0.0
require 'em-hiredis' ## v0.1.0
module EventMachine
module Hiredis
class Client
def self.connect(host = 'localhost', port = 6379)
conn = new(host, port)
EM::Synchrony.sync conn.connect
conn
end
alias :old_method_missing :method_missing
def method_missing(sym, *args)
EM::Synchrony.sync old_method_missing(sym, *args)
end
end
end
end
EventMachine.synchrony do
redis = EM::Hiredis.connect
redis.set('foo', 'bar')
puts redis.get('foo')
EM.stop
end
이와 같은 다이
$ ruby /tmp/reddy.rb
/home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-synchrony-1.0.0/lib/em-synchrony.rb:58:in `yield': can't yield from root fiber (FiberError)
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-synchrony-1.0.0/lib/em-synchrony.rb:58:in `sync'
from /tmp/reddy.rb:16:in `method_missing'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/client.rb:119:in `select'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/client.rb:38:in `block in connect'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/event_emitter.rb:8:in `call'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/event_emitter.rb:8:in `block in emit'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/event_emitter.rb:8:in `each'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/event_emitter.rb:8:in `emit'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-hiredis-0.1.0/lib/em-hiredis/connection.rb:15:in `connection_completed'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb:179:in `run_machine'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/eventmachine-1.0.0.beta.4/lib/eventmachine.rb:179:in `run'
from /home/blt/.rvm/gems/ruby-1.9.3-p0/gems/em-synchrony-1.0.0/lib/em-synchrony.rb:27:in `synchrony'
from /tmp/reddy.rb:22:in `<main>'
나는이 깊은 혼란을 찾을 수 있습니다. 왜 일을하고 내가 잘못 생각하지 않는 이유는 무엇입니까? 그렇다면, 내가 무엇을 다르게 할 수 있습니까? 뭔가 이상 호도하지 않는 한,이 전각 동시성의 README 당, 코셔입니다.
해결법
-
==============================
1.난 당신이 올바른 버전이 발견 될 경우 코드가 작동 할 수 있다고 생각이 느슨한 의존 한 문제가 원숭이 패치를 시도하는 그들을-hiredis.
난 당신이 올바른 버전이 발견 될 경우 코드가 작동 할 수 있다고 생각이 느슨한 의존 한 문제가 원숭이 패치를 시도하는 그들을-hiredis.
여기에 EM-동시성의 마스터 분기 기준으로 완전 작업 코드는하지만입니다 :
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
다음을 실행 :
$ bundle $ ruby test.rb
원숭이 패치 당신이 뭔가 EM-동시성이 시행 또는 적어도 감지해야되는 사용되는 패치 보석의 정확한 버전을 확인하지 않는 한 보석 패치의 본질적 결함 방법입니다.
from https://stackoverflow.com/questions/8750788/simple-use-of-emsynchronysync-causes-root-fiber-fibererror-my-fault by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스, Node.js를, 그리고 Socket.io : 크로스 서버 인증과 이해 Node.js를 (0) | 2020.01.17 |
---|---|
[REDIS] 레디 스는 사전 순 이외의 정렬, zrevrangebyscore (0) | 2020.01.17 |
[REDIS] Stackexchange.Redis 시간 제한 및 socketfailures (0) | 2020.01.17 |
[REDIS] , 레디 스 또는 MongoDB를 한 번에 카운터 수백 증가? (0) | 2020.01.17 |
[REDIS] 어떻게 원격으로 내 RedisCloud DB에있는 데이터를 검사 할 수 있습니다? (0) | 2020.01.17 |