[REDIS] 구조 제한 시간 : 레디 스 보석의 오류 (루비)
REDIS구조 제한 시간 : 레디 스 보석의 오류 (루비)
나는 상기 레디 스 라이브러리에서 제기 타임 아웃 :: 오류를 구출해야하지만 난 작동하지 않는 특정 클래스를 구출, 문제가 실행 해요.
begin
Redis.new( { :host => "127.0.0.X" } )
rescue Timeout::Error => ex
end
=> Timeout::Error: Timeout::Error from /Users/me/.rvm/gems/ree-1.8.7-2011.03@gowalla/gems/redis-2.2.0/lib/redis/connection/hiredis.rb:23:in `connect'
내가 구조 예외로 할 때 그것은 여전히 작동하지 않습니다
begin
Redis.new( { :host => "127.0.0.X" } )
rescue Exception => ex
end
=> Timeout::Error: Timeout::Error from /Users/me/.rvm/gems/ree-1.8.7-2011.03@gowalla/gems/redis-2.2.0/lib/redis/connection/hiredis.rb:23:in `connect'
내가 수동으로 예외를 발생하려고하면, 나는 그것을 구출 할 수 있지만 그것이 레디 스 보석 (2.2.0) 내에서 호출 때 내가 그것을 구할 수없는 이유를 모르겠어요.
begin
raise Timeout::Error
rescue Timeout::Error => ex
puts ex
end
Timeout::Error
=> nil
모든 단서는 방법이 예외를 구출하기 위해?
해결법
-
==============================
1.당신은 바로 IRB에서이 코드를 실행? 당신은 점점 예외 실제로 Redis.new에 의해 제기되지 않습니다. 그것은 IRB 통화가 당신에게 당신이 방금 입력 한 식의 값을 표시 할 수있는 검사 방법에 의해 제기되고있다.
당신은 바로 IRB에서이 코드를 실행? 당신은 점점 예외 실제로 Redis.new에 의해 제기되지 않습니다. 그것은 IRB 통화가 당신에게 당신이 방금 입력 한 식의 값을 표시 할 수있는 검사 방법에 의해 제기되고있다.
그냥 스택 트레이스를 보면 (나는 그것을 읽을 수 있도록 경로를 단축) :
ruby-1.8.7-p330 :009 > Redis.new(:host => "google.com") Timeout::Error: time's up! from /.../SystemTimer-1.2.3/lib/system_timer/concurrent_timer_pool.rb:63:in `trigger_next_expired_timer_at' from /.../SystemTimer-1.2.3/lib/system_timer/concurrent_timer_pool.rb:68:in `trigger_next_expired_timer' from /.../SystemTimer-1.2.3/lib/system_timer.rb:85:in `install_ruby_sigalrm_handler' from /..../lib/ruby/1.8/monitor.rb:242:in `synchronize' from /.../SystemTimer-1.2.3/lib/system_timer.rb:83:in `install_ruby_sigalrm_handler' from /.../redis-2.2.2/lib/redis/connection/ruby.rb:26:in `call' from /.../redis-2.2.2/lib/redis/connection/ruby.rb:26:in `initialize' from /.../redis-2.2.2/lib/redis/connection/ruby.rb:26:in `new' from /.../redis-2.2.2/lib/redis/connection/ruby.rb:26:in `connect' from /.../SystemTimer-1.2.3/lib/system_timer.rb:60:in `timeout_after' from /.../redis-2.2.2/lib/redis/connection/ruby.rb:115:in `with_timeout' from /.../redis-2.2.2/lib/redis/connection/ruby.rb:25:in `connect' from /.../redis-2.2.2/lib/redis/client.rb:227:in `establish_connection' from /.../redis-2.2.2/lib/redis/client.rb:23:in `connect' from /.../redis-2.2.2/lib/redis/client.rb:247:in `ensure_connected' from /.../redis-2.2.2/lib/redis/client.rb:137:in `process' ... 2 levels... from /.../redis-2.2.2/lib/redis/client.rb:46:in `call' from /.../redis-2.2.2/lib/redis.rb:90:in `info' from /..../lib/ruby/1.8/monitor.rb:242:in `synchronize' from /.../redis-2.2.2/lib/redis.rb:89:in `info' from /.../redis-2.2.2/lib/redis.rb:1075:in `inspect' from /..../lib/ruby/1.8/monitor.rb:242:in `synchronize' from /.../redis-2.2.2/lib/redis.rb:1074:in `inspect' from /..../lib/ruby/1.8/irb.rb:310:in `output_value' from /..../lib/ruby/1.8/irb.rb:159:in `eval_input' from /..../lib/ruby/1.8/irb.rb:271:in `signal_status' from /..../lib/ruby/1.8/irb.rb:155:in `eval_input' from /..../lib/ruby/1.8/irb.rb:154:in `eval_input' from /..../lib/ruby/1.8/irb.rb:71:in `start' from /..../lib/ruby/1.8/irb.rb:70:in `catch' from /..../lib/ruby/1.8/irb.rb:70:in `start' from /..../bin/irb:17
위에서 볼 수 있듯이, 예외는 내부 Redis.new을하지 검사 발생합니다. 당신은 실제로 많은 것들을 않는 대신 자신의 상태를 인쇄하는하는 레디 스 객체에 검사를 호출합니다. 이 경우, 서버에 연결하려는 시도를 검사하고 그 시간이 초과 예외가 발생합니다. 이것은 나에게 아주 나쁜 디자인처럼 보인다 어쩌면 우리는 레디 스 보석의 관리자들에 대한 버그 리포트를 제출해야한다.
IRB에서 몇 가지 흥미로운 행동이 리드 :
이 예외를 캐치 할 경우, 시작 / 구조 / 엔드 블록 내부에 ensure_connected 부르심보십시오.
from https://stackoverflow.com/questions/7035054/rescue-timeouterror-from-redis-gem-ruby by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 서버 클러스터 작동하지 않음 (0) | 2020.01.21 |
---|---|
[REDIS] 파이썬에서 유니 코드 (0) | 2020.01.21 |
[REDIS] 건너 뛰기 / 모의 레디 스에서 Junit와를 (0) | 2020.01.21 |
[REDIS] 파이썬 3.5 json.loads 및 레디 스 (0) | 2020.01.21 |
[REDIS] resque 장애 조치 레디 스를위한 솔루션 (0) | 2020.01.21 |