caching - Redis 缓存驱动程序在 PHPUnit 中抛出异常

标签 caching codeigniter redis phpunit

这里有人有使用 Redis 缓存驱动程序 (CI v3.0.2) 并使用 PHPUnit (v4.8.16) 对其进行测试的经验吗?

我只是按照 here 的描述尝试了它,它似乎在浏览器中运行良好,但是当我转到我的终端并尝试使用 PHPUnit 对其进行测试时,我得到了这个:

Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away' in /path/to/my-app/system/libraries/Cache/drivers/Cache_redis.php on line 317

Call Stack:
   0.0002     247008   1. {main}() /path/to/my-app/vendor/phpunit/phpunit/phpunit:0
   0.0128    1116832   2. PHPUnit_TextUI_Command::main() /path/to/my-app/vendor/phpunit/phpunit/phpunit:47
   0.0128    1117456   3. PHPUnit_TextUI_Command->run() /path/to/my-app/vendor/phpunit/phpunit/src/TextUI/Command.php:100
   0.1355    6531040   4. PHPUnit_TextUI_TestRunner->doRun() /path/to/my-app/vendor/phpunit/phpunit/src/TextUI/Command.php:149
   0.1437    6885808   5. PHPUnit_Framework_TestSuite->run() /path/to/my-app/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:440
   0.1647    7612208   6. PHPUnit_Framework_TestSuite->run() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
   0.1704    7615816   7. PHPUnit_Framework_TestCase->run() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestSuite.php:747
   0.1704    7616272   8. PHPUnit_Framework_TestResult->run() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:724
   0.1705    7617952   9. PHPUnit_Framework_TestCase->runBare() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestResult.php:612
   0.1729    7937600  10. PHPUnit_Framework_TestCase->runTest() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:768
   0.1729    7938368  11. ReflectionMethod->invokeArgs() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:909
   0.1729    7938640  12. ControllersTest->testLoadController() /path/to/my-app/vendor/phpunit/phpunit/src/Framework/TestCase.php:909
   0.1731    7941912  13. CI_Controller->__construct() /path/to/my-app/tests/core/ControllersTest.php:33
   0.1732    7943440  14. load_class() /path/to/my-app/system/core/Controller.php:75

RedisException: Redis server went away in /path/to/my-app/system/libraries/Cache/drivers/Cache_redis.php on line 317

我的环境:

$ redis-cli --version
redis-cli 3.0.5

$ php --version
PHP 5.6.14-1+deb.sury.org~wily+1 (cli) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
   with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
   with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

我的“application/config/redis.php”文件:

<?php
defined('BASEPATH') or exit('No direct script access allowed');

/**
 * Redis Cache Configuration
 * @link https://codeigniter.com/user_guide/libraries/caching.html#redis-caching
 */

$config['socket_type'] = 'tcp';
// $config['socket']      = '/var/run/redis.sock';
$config['host']        = '127.0.0.1';
$config['password']    = null;
$config['port']        = 6379;
$config['timeout']     = 0;

我该如何解决这个问题?

最佳答案

刚刚从 CI 社区论坛得到一个解决方案,它是从 CI_Cache_Redis 类扩展 __destruct() 方法来捕获 RedisException

Here the link和这里的代码(编辑了一下)

// application/libraries/Cache/drivers/MY_Cache_redis.php
public function __destruct()
{
    try {
        $this->_redis->close();
    } catch (Exception $e) {
        // Do nothing
        // log_message('info', $e);
    }
}

关于caching - Redis 缓存驱动程序在 PHPUnit 中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354176/

相关文章:

php - 获取所有类别的帖子

java - 使用Java指向Redis(缓存)中的单个值的多个键

java - @CacheEvict(...) 和@CacheEvict(value, allEntries) 有什么区别?

wordpress - 当通过页面规则强制使用 SSL "on"时,控制 Cloudflare 上的缓存和 CDN

Codeigniter URL : How to display id and article title in the URL

php - 在 codeigniter 中访问包含查询的变量

python - redisearch 是否支持嵌套查询?

php - Redis与Sentinel通信

sql-server - 主要插入查询时查询完成但有错误

http - ASP.NET : How to enforce a reload of a web static file