Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

रेस्क्यू टाइमआउट ::रेडिस जेम से त्रुटि (रूबी)

आपने इस कोड को आईआरबी में चलाया है, है ना? आपको जो अपवाद मिल रहा है, वह वास्तव में Redis.new . द्वारा नहीं उठाया जा रहा है . इसे inspect . द्वारा उठाया जा रहा है मेथड, जो 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

जैसा कि आप ऊपर देख सकते हैं, अपवाद inspect . के अंदर होता है , नहीं Redis.new . जब आप कॉल करते हैं inspect एक रेडिस ऑब्जेक्ट पर, केवल अपने राज्य को प्रिंट करने के बजाय यह वास्तव में बहुत सी चीजें करता है। इस मामले में, inspect सर्वर से कनेक्ट करने का प्रयास करता है और उस समय समाप्त होने पर अपवाद फेंकता है। यह मेरे लिए एक बहुत ही खराब डिज़ाइन की तरह लगता है और शायद हमें रेडिस रत्न के अनुरक्षकों को एक बग रिपोर्ट दर्ज करनी चाहिए।

इससे आईआरबी में कुछ दिलचस्प व्यवहार होता है:

  • टाइपिंग Redis.new(:host => "google.com") एक अपवाद के रूप में परिणाम ऊपर दिखाया गया है
  • टाइपिंग Redis.new(:host => "google.com"); 'hello' परिणाम '=> "hello" '

यदि आप इस अपवाद को पकड़ना चाहते हैं, तो ensure_connected . पर कॉल करके देखें आपके आरंभ/बचाव/समाप्ति ब्लॉक के अंदर।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. फ्लास्क-मेल और रेडिस क्यू लाइब्रेरी एकीकरण त्रुटि दे रहा है

  2. रेडिस हैश का उपयोग कैसे करें

  3. रेडिस के लिए लुआ लिपि जो चाबियों के मूल्यों को बताती है

  4. रेडिस, ZINCRBY के साथ एक zset के सभी स्कोर कैसे बढ़ाएं?

  5. रेडिस - मास्टर दास संबंध में मक्खी पर CONFIG SET का उपयोग करना