2015-02-08 63 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。這比原本要艱難得多。