当我尝试使用laravel 4.1的SSH / Remote类部署时,我偶尔会遇到此异常
[2014-01-03 18:26:21] production.ERROR: exception 'ErrorException' with message 'Connection closed by server' in /home/{user}/{location}/deploy/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php:918
我想知道是否有办法检测它是否连接失败以便再次尝试连接或多次?
有什么想法吗?
答案 0 :(得分:2)
Laravel使用phpseclib作为其SSH库。在连接失败时,phpseclib执行user_error('Connection closed by server');
(参见Net / SSH2.php,第〜911行)。 Laravel有一个全局错误处理程序,可以选择并记录它(正如您在问题中看到的那样)。
不幸的是,phpseclib会触发错误,而不是抛出异常。如果它们是例外,您可以为Laravel的错误处理添加新条件:
App::error(function(Exception $exception){
Log::error($exception);
if($exception instanceof PHPSecLibException){
// Let's handle this
}
});
这绝对是做到这一点的“正确方法”,但这些不是 true 例外(它们是在触发错误时代表您生成的通用Laravel异常)。< / p>
幸运的是,Laravel代表您将错误转换为例外。见src/Illuminate/Exception/Handler.php(行~129-135)。因此,我们可以根据您拥有的信息添加条件:
App::error(function(Exception $exception){
Log::error($exception);
if(($exception->getMessage() == "Connection closed by server") &&
($exception->getFile() == "/home/{user}/{location}/deploy/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php")){
// Let's handle this
}
});
查看可用的Exception methods。