diff --git a/cms/lib/classes/AcaiAPI.php b/cms/lib/classes/AcaiAPI.php index be26f53..c301438 100644 --- a/cms/lib/classes/AcaiAPI.php +++ b/cms/lib/classes/AcaiAPI.php @@ -34,6 +34,7 @@ class AcaiAPI // ── Cache flags (mirror CocoDB interface) ───────────────────────── public static $redis = null; public static $redis_expireTime = 0; + public static $redis_no_disponible = false; public static $force_load_cache = false; public static $force_redis = false; public static $force_redis_module = false; // consumed by external cache layer @@ -647,14 +648,29 @@ class AcaiAPI /** Connect to Redis (idempotent). */ static function initCache() { + // Sin Redis (hosting propio sin el servicio o sin la extensión, o el + // servicio caído) la web sigue SIN caché en vez de morir con un fatal: + // cacheGet/cacheSet ya no hacen nada si no hay conexión. Se marca para + // no reintentar en cada consulta de la misma petición. + if (self::$redis_no_disponible) return; + if (!class_exists('Redis')) { + self::$redis_no_disponible = true; + self::$redis = null; + return; + } + $redisHost = getenv('REDIS_HOST') ?: '127.0.0.1'; $redisPort = (int)(getenv('REDIS_PORT') ?: 6379); - if (!self::$redis) { - self::$redis = new Redis(); - self::$redis->connect($redisHost, $redisPort); - } elseif (!self::$redis->isConnected()) { - self::$redis->connect($redisHost, $redisPort); + try { + if (!self::$redis) self::$redis = new Redis(); + if (!self::$redis->isConnected() && !self::$redis->connect($redisHost, $redisPort)) { + throw new RuntimeException("no se pudo conectar a $redisHost:$redisPort"); + } + } catch (Throwable $e) { + self::$redis_no_disponible = true; + self::$redis = null; + error_log('[cache] Redis no disponible, se sigue sin caché: ' . $e->getMessage()); } } diff --git a/cms/lib/classes/CocoDB.php b/cms/lib/classes/CocoDB.php index bd1fe1d..1693c47 100755 --- a/cms/lib/classes/CocoDB.php +++ b/cms/lib/classes/CocoDB.php @@ -14,6 +14,7 @@ class CocoDB public static $trackData = []; public static $redis = null; public static $redis_expireTime = 0; + public static $redis_no_disponible = false; public static $force_load_cache = false; public static $force_redis = false; public static $force_redis_module = false; @@ -1176,14 +1177,29 @@ class CocoDB */ static function initCache() { + // Sin Redis (hosting propio sin el servicio o sin la extensión, o el + // servicio caído) la web sigue SIN caché en vez de morir con un fatal: + // cacheGet/cacheSet ya no hacen nada si no hay conexión. Se marca para + // no reintentar en cada consulta de la misma petición. + if (self::$redis_no_disponible) return; + if (!class_exists('Redis')) { + self::$redis_no_disponible = true; + self::$redis = null; + return; + } + $redisHost = getenv('REDIS_HOST') ?: '127.0.0.1'; $redisPort = (int)(getenv('REDIS_PORT') ?: 6379); - if (!self::$redis) { - self::$redis = new Redis(); - self::$redis->connect($redisHost, $redisPort); - } else if (!self::$redis->isConnected()) { - self::$redis->connect($redisHost, $redisPort); + try { + if (!self::$redis) self::$redis = new Redis(); + if (!self::$redis->isConnected() && !self::$redis->connect($redisHost, $redisPort)) { + throw new RuntimeException("no se pudo conectar a $redisHost:$redisPort"); + } + } catch (Throwable $e) { + self::$redis_no_disponible = true; + self::$redis = null; + error_log('[cache] Redis no disponible, se sigue sin caché: ' . $e->getMessage()); } }