Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Error al ejecutar comando cache:clear --env=prod --no-debug

25 de agosto de 2016

Hola

Al ejecutar el comando: cache:clear --env=prod --no-debug

ME da este mensaje.

PHP Fatal error: Call to undefined function Doctrine\Common\Cache\apc_fetch() in C:\xampp\htdocs\mds\vendor\doctrine\common\lib\Doctrine\Common\Cache\ApcCache.php on line 42 Done.

Me podrian orientar

Gracias.


Respuestas

#1

Te recomiendo revisar tu archivo config_prod.yml y compares lo siguiente:

Debería tener comentareado estas líneas:

#framework:
#    validation:
#        cache: validator.mapping.cache.apc
#    serializer:
#        cache: serializer.mapping.cache.apc

#doctrine:
#    orm:
#        metadata_cache_driver: apc
#        result_cache_driver: apc
#        query_cache_driver: apc

Sobreescribe esos comentarios con la configuración:

framework:
    validation:
        cache: apc
 
doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
        query_cache_driver: apc

Comenta luego si te sirvió o no, Saludos.

@RoberRielo

25 agosto 2016, 6:03
#2

@RoberRielo

Me siguie saliendo ese error.

Podria ser algo de la configuracion php/apache.

Tuve que cambiar el equipo, por tanto en mi caso realice la instalación y configuración del servidor local a mano en el nuevo equipo.

Aplicación funcionaba correctamente en el antiguo equipo.

@dariongg

25 agosto 2016, 14:28
#3

Tienes problemas con Apc, el error t da en la linea en que PHP intenta recuperar informacion. Te aconsejo que borres la cache a mano y fijarte que el servidor tenga APC activo. Voy a aprovechar para mostrar una solucion muy simple que implementé sobre el problema de APC, lo que pasa es que symfony, en especial doctrine, no valida que esté activo APC antes de usarla, yo siempre pongo el siguiente código en el archivo config_prod.yml :

- { resource: config_apc.php }

lo que hago es importar un archivo de configuracion en PHP para poder ponerle un condicional. o sea me quedaría así

imports:
    - { resource: config.yml }
    - { resource: config_apc.php }
 
#framework:
#    validation:
#        cache: validator.mapping.cache.apc
#    serializer:
#        cache: serializer.mapping.cache.apc

#doctrine:
#    orm:
#        metadata_cache_driver: apc
#        result_cache_driver: apc
#        query_cache_driver: apc

monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      nested
        nested:
            type:  stream
            path:  "%kernel.logs_dir%/%kernel.environment%.log"
            level: debug
        console:
            type:  console

luego en el archivo config_apc.php que estoy importando pongo:

<?php 
if(extension_loaded('apc') && ini_get('apc.enabled') && function_exists('apc_store')){
    return array (
        'doctrine' => 
            array (
                'orm' => 
                array (
                  'metadata_cache_driver' => 'apc',
                  'result_cache_driver' => 'apc',
                  'query_cache_driver' => 'apc',
                ),
            ),
        'framework' => 
            array (
                'validation' => 
                    array ( 'cache' => 'validator.mapping.cache.apc' ),
                'serializer' => 
                    array ( 'cache' => 'serializer.mapping.cache.apc' ),
            ),
    );
}else{
    return array (
      'doctrine' => 
      array (
            'orm' => 
            array (
              'metadata_cache_driver' => 'array',
              'result_cache_driver' => 'array',
              'query_cache_driver' => 'array',
            ),
        ),
    );
}

es simple pregunto si APC está activo lo uso. Esto es para doctrine, si se quiere usar la misma estrategia para que symfony lo use en la carga de clase pongo el controlador frontal app.php de la manera siguiente:

use Symfony\Component\HttpFoundation\Request;
 
/**
 * @var Composer\Autoload\ClassLoader
 */
$loader = require __DIR__.'/app/autoload.php';
include_once __DIR__.'/app/bootstrap.php.cache';
 
// Enable APC for autoloading to improve performance.
// You should change the ApcClassLoader first argument to a unique prefix
// in order to prevent cache key conflicts with other applications
// also using APC.
 
if(extension_loaded('apc') && ini_get('apc.enabled') && function_exists('apc_store')){
    $apcLoader = new Symfony\Component\ClassLoader\ApcClassLoader(sha1(__FILE__), $loader);
    $loader->unregister();
    $apcLoader->register(true);
}
 
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
//ESI
$kernel = new AppCache($kernel);
 
// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

y esto es todo, simple y t puedes olvidar del lio de la cache, NOTA: El código es de un sistema en el que uso symfony 2.8 Saludos.

@jdvellon

25 agosto 2016, 15:28