我需要Timeout::Error
从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'
当我尝试营救Exception
时仍然无法正常工作
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'
如果我尝试手动引发该异常,则可以对其进行挽救,但不知道为什么从Redis Gem(2.2.0)中调用该异常时为何无法对其进行挽救。
begin
raise Timeout::Error
rescue Timeout::Error => ex
puts ex
end
Timeout::Error
=> nil
任何线索如何挽救这个异常?
您在irb中运行了此html" target="_blank">代码,对吗?您收到的异常实际上不是由引发的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
Redis对象时,它实际上不仅仅是在打印其状态,而且还可以做很多事情。在这种情况下,inspect
尝试连接到服务器并在超时时引发异常。这对我来说似乎是一个非常糟糕的设计,也许我们应该向Redis
gem的维护者提交错误报告。
这导致了IRB中一些有趣的行为:
Redis.new(:host => "google.com")
导致异常,如上所示Redis.new(:host => "google.com"); 'hello'
结果为’ => "hello"
‘如果要捕获此异常,请尝试ensure_connected
在begin / rescue / end块内调用。
GRUB2在BIOS平台上的常规启动步骤是这样的:BIOS --> boot.img[MBR] --> core.img[MBR gap/embedding area/BIOS Boot Partition] --> 设置"prefix root cmdpath"环境变量 --> 加载"normal.mod"模块[同时还包括它所依赖的 terminal crypto extcmd boot get
想不通的救援模式 朋友们,请教一个问题: 拿到实体服务器后,如果忘记Linux 服务器的root密码,我们可以进入救援模式,进行密码修改。那这种操作,我们是不是对于任何一台服务器,就算不知道密码,然后通过救援模式进去设置一个密码,然后就可以进入到系统了? 问题问得有点蠢,我一时想不通,求求朋友们指点下...�� /轻喷
在ruby on rails应用程序中,我有一个包含10,000个条目的表,可以使用不同的参数搜索这些条目。在dev框中,这很好,但在production框中,我得到了一个错误。 null 编辑 大约7秒钟后,我收到了“我们很抱歉,但出了点问题”的rails消息。我尝试增加keepalive_timeout,但没有任何变化。
null 我们得出的结论是,客户端可以连接到Nginx,但是Nginx在将请求重定向到FPM(可以通过端口7777访问)时没有收到响应,并显示超时错误。我们一直致力于解决Nginx和FPM之间的通信问题,但几个小时后,我们还没有找到解决方案。 注意:这个问题在我们设置的四个虚拟机中重复出现。 Nginx错误日志(注意:主机名和ip已被取消) 文件:/etc/nginx/fastcgi_params
问题内容: 我已经安装了Celery,并且正在尝试使用Celery First Steps Doc 对其进行测试。 我尝试将Redis和RabbitMQ都用作代理和后端,但无法获得结果: 每次,我都会收到此错误: 经纪人部分似乎工作得很好:当我运行这段代码时 我得到了(按预期) [2015-08-04 12:05:44,910:INFO / MainProcess]收到的任务:tasks.add
我对Scala并不熟悉SBT,我正在尝试弄清楚新的IntelliJide。 已添加项目