No se generan archivos proxy.php en cache de prod.

133 views
Skip to first unread message

Pablo Braulio

unread,
Jan 30, 2013, 10:35:56 AM1/30/13
to Lista de symfony
Hola a todos.

Estoy probando el desarrollo que he terminado en el entorno de
produccion y me encuentro que no funciona.

Veo en los logs de apache esto:

"PHP Warning: require(/.../app/cache/prod/doctrine/orm/Proxies/MjGenericBundleEntityIdiomaSoportadoProxy.php):
failed to open stream: No such file or directory in
/.../vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php on line
85

Compruebo la cache y veo que no existen los mismos ficheros en dev que en prod.

Los he copiado
cd app/cache
cp -rfv dev/doctrine/orm/Proxies/* prod/doctrine/orm/Proxies/

y así funciona.

¿Alguien sabe que puede estar pasando?.

Mi versión es la 2.0.22

Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el
campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin
de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buzón a buzón para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro está de garantizar la
privacidad.

Lucas Serrey

unread,
Jan 31, 2013, 8:31:19 AM1/31/13
to symfo...@googlegroups.com
En cuanto al check del servidor... todos los puntos están OK ?

No se si es buena idea comparar la cache de prod con la de dev... Son entornos con ciertas configuraciones diferentes..

Pablo Braulio

unread,
Jan 31, 2013, 9:04:21 AM1/31/13
to Lista de symfony
-bash-4.1$ php app/check.php
********************************
* *
* Symfony requirements check *
* *
********************************

php.ini used by PHP: /etc/php.ini

** WARNING **
* The PHP CLI can use a different php.ini file
* than the one used with your web server.
* If this is the case, please ALSO launch this
* utility from your web server.
** WARNING **

** Mandatory requirements **

OK Checking that PHP version is at least 5.3.2 (5.4.11 installed)
OK Checking that the "date.timezone" setting is set
OK Checking that app/cache/ directory is writable
OK Checking that the app/logs/ directory is writable
OK Checking that the json_encode() is available
OK Checking that the SQLite3 or PDO_SQLite extension is available
OK Checking that the session_start() is available
OK Checking that the ctype_alpha() is available
OK Checking that the token_get_all() is available
OK Checking that the APC version is at least 3.0.17

** Optional checks **

OK Checking that the PHP-XML module is installed
OK Checking that the token_get_all() function is available
OK Checking that the mb_strlen() function is available
OK Checking that the iconv() function is available
OK Checking that the utf8_decode() is available
OK Checking that the posix_isatty() is available
OK Checking that the intl extension is available
OK Checking that the intl ICU version is at least 4+
OK Checking that a PHP accelerator is installed


[[WARNING]] Checking that php.ini has short_open_tag set to off: FAILED
*** Set short_open_tag to off in php.ini ***
OK Checking that php.ini has magic_quotes_gpc set to off
OK Checking that php.ini has register_globals set to off
OK Checking that php.ini has session.auto_start set to off

** Optional checks (Doctrine) **

OK Checking that PDO is installed
OK Checking that PDO has some drivers installed: mysql, sqlite
Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el
campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin
de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buzón a buzón para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro está de garantizar la
privacidad.


> --
> --
> Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de
> Google Groups.
> Para publicar en este grupo, envía un email a symfo...@googlegroups.com
> Para darte de baja, envía un email a symfony-es+...@googlegroups.com
> El resto de opciones puedes encontrarlas en
> http://groups.google.com/group/symfony-es?hl=es
>
> ---
> Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de
> Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus correos
> electrónicos, envía un correo electrónico a
> symfony-es+...@googlegroups.com.
> Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
>
>

Roberto Moreno P.

unread,
Jan 31, 2013, 9:21:08 AM1/31/13
to symfo...@googlegroups.com
¿Y revistaste la versión web?

Saludos
--
Roberto Andrés Moreno Pérez

Carlos Zuniga

unread,
Jan 31, 2013, 9:44:33 AM1/31/13
to symfo...@googlegroups.com
2013/1/31 Pablo Braulio <bru...@gmail.com>:
Chequea también los permisos del usuario de apache en el directorio app/cache.

De todos modos en lugar de copiar los proxies de dev, mejor sería
generarlos con cache:warmup:

app/console cache:warmup --env=prod

Saludos
--
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.

Pablo Braulio

unread,
Jan 31, 2013, 11:00:48 AM1/31/13
to Lista de symfony
Los permisos de app/cache están bien.

Ejecuto esto en consola:

rm -rf app/cache/*
-bash-4.1$ php app/console cache:warmup
Warming up the cache
-bash-4.1$ php app/console cache:warmup --env=prod
Warming up the cache

No muestra error.

Pero si intento acceder por web, veo esto en los logs.

2013/01/31 16:58:29 [error] 1915#0: *1906 FastCGI sent in stderr: "PHP
Fatal error: Uncaught exception 'ReflectionException' with message
'Class Mj\GenericBundle\Entity\Mj\GenericBundle\Entity\Usuario does
not exist' in /var/www/admin_mundijuegos/vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php:194
Stack trace:
#0 /var/www/admin_mundijuegos/vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php(194):
ReflectionParameter->getClass()
#1 /var/www/admin_mundijuegos/vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php(131):
Doctrine\ORM\Proxy\ProxyFactory->_generateMethods(Object(Doctrine\ORM\Mapping\ClassMetadata))
#2 /var/www/admin_mundijuegos/vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php(117):
Doctrine\ORM\Proxy\ProxyFactory->_generateProxyClass(Object(Doctrine\ORM\Mapping\ClassMetadata),
'MjGenericBundle...', '/var/www/admin_...', '<?php??namespac...')
#3 /var/www/admin_mundijuegos/vendor/symfony/src/Symfony/Bridge/Doctrine/CacheWarmer/ProxyCacheWarmer.php(68):
Doctrine\ORM\Proxy\ProxyFactory->generateProxyClasses(Array)
#4 /var/www/admin_mundijuegos/vendor/symfony/src/Sy in
/var/www/admin_mundijuegos/vendor/doctrine/lib/Doctrine/ORM/Proxy/ProxyFactory.php
on line 194" while reading response header from upstream, client:
192.168.0.138, server: admin.mundijuegos.pablo, request: "GET /
HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host:
"admin.mundijuegos.pablo"

Lo que me llama la atención es que está buscando una clase en
Mj\GenericBundle\Entity\Mj\GenericBundle\Entity\Usuario.
Es como si hubiera un namespace mal creado. He buscado en el código y
todo está bien.


Si ahora copio /app/cache/dev/doctrine/orm/Proxies/* en
/app/cache/prod/doctrine/orm/Proxies, funciona.

:-(


Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el
campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin
de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buzón a buzón para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro está de garantizar la
privacidad.


2013/1/31 Carlos Zuniga <carlo...@gmail.com>:

Pablo Braulio

unread,
Feb 1, 2013, 1:31:45 PM2/1/13
to Lista de symfony
Ya he encontrado la causa del problema.

El problema venía porque en alguna entities al definir mappings, los
getters y setters se me creaban de este modo.

/**
* Set userId
*
* @param Mj\GenericBundle\Entity\Usuario $userId
*/
public function setUserId(Mj\GenericBundle\Entity\Usuario $userId)
<=== problema
{
$this->userId = $userId;
}

Parece ser que php5 al ponerle toda la ruta se hace un lio y doctrine
al generar los ficheros proxy en la caché, duplica la ruta aplicando
antes el namespace. Por eso aparece el error de
Mj\GenericBundle\Entity\Mj\GenericBundle\Entity\Usuario.
La solución es hacerlo así.

use Mj\GenericBundle\Entity\Usuario;
....
/**
* Set userId
*
* @param Mj\GenericBundle\Entity\Usuario $userId
*/
public function setUserId(Usuario $userId) <=== solución
{
$this->userId = $userId;
}

Nunca te acostarás sin saber una cosa mas. Y agusto que voy a dormir hoy. :-D

Gracias a todos por vuestra ayuda.
Saludos cordiales.
Pablo.

Si lo reenvías, ten la precaución de borrar los datos de procedencia que
encabezarían tu reenvío – empezando por mi dirección de correo
electrónico - . Coloca siempre las direcciones de tus contactos en el
campo <CCO> para que viajen discretas, no en el campo <Para> ni en
el<CC>. De esa forma nadie que lo reciba tendrá constancia de las señas
de los demás destinatarios a los que también se remite. Todo ello a fin
de evitar que nadie se aproveche de todas las direcciones que se van
acumulando al pasar de buzón a buzón para el lanzamiento de correo
basura y otras indeseadas lindezas. Aparte claro está de garantizar la
privacidad.


Reply all
Reply to author
Forward
0 new messages