2015-02-08 95 views
2

您好我有以下几点:Predis - 捕获连接错误

// Named array of connection parameters: 
    $redis = new Predis\Client([ 
     'scheme' => 'tcp', 
     'host' => $host, 
     'port' => $port, 
     'password' => $auth, 
    ]); 

    try { 
     // explicitly call Predis\Client::connect() 
     $redis->connect(); 
    } 
    catch (Exception $e) { 
     return Redirect::to('profile') 
       ->with('result', '<div class="col-lg-12"><div class="alert alert-danger alert-border-left alert-gradient alert-dismissable"> 
       <button aria-hidden="true" data-dismiss="alert" class="close" type="button">×</button> 
       <i class="fa fa-check pr10"></i> 
       <strong>Error - '.$e.'</strong> Unable to connect to redis server, please double check your database detals.</div></div>'); 
    } 

但是这并不捕捉错误,如NOAUTH。

有人能指出我正确的方向吗?

+0

尝试'catch(\ Exception $ e)' – lukasgeiter 2015-02-08 13:34:32

+0

嗨,nope仍然没有捕获错误 – user3662307 2015-02-08 13:36:46

回答

3

我广泛阅读了这个问题,尽管我的配置是不同的,因为它使用多台服务器,而我试图解决的问题是一个失败的服务器,这似乎已经做到了我:

try { 
     $client = new Predis\Client($params); 
     $client->connect(); 
} catch(Predis\Connection\ConnectionException $e) { 
     echo $e->getMessage(); 
} 

我尝试了很多变化,这似乎阻止了应用程序的所有尖叫。在我的情况下,我传递了一系列服务器并尝试对它们进行ping操作并删除发生故障的服务器。这似乎是过度杀伤,但我怎么知道如果服务器没有这样做是关闭?

另外,如果你不尝试连接,那么它会在其他地方失败,也就是说,连接是懒惰的,当它真的需要时会被调用 - 对我来说,这总是导致连接错误。在使用它之前调用它可以让我捕捉到异常。然后我必须找出Exception为什么不能做,并且不得不将它切换到Predis \ Connection \ ConnectionException。这比原本要艰难得多。