Be a happy coder

You are here

CiviCRM y XCache, pantallas en blanco

17 Oct 2012

Para cualquier desarrollador web, una pantalla blanca o WSoD (White Screen of Death) es sinónimo de un problema interno, algo que no debería ocurrir nunca.
En este caso, el problema no es problema del desarrollo puesto que la aplicación funciona correctamente en otros servidores, sino de que CiviCRM no se lleva bien con XCache.

El problema: ubicamos nuestro Drupal 7 con los módulos de CiviCRM en un nuevo servidor, la aplicación funcionaba correctamente en otros servidores y, de hecho, la parte drupal funciona correctamente en todos los aspectos, sin embargo al intentar acceder a la ruta /civicrm tenemos que nos sale una pantalla blanca.

Como está claro que ha ocurrido un error y en los logs de drupal no aparece nada, es de entender que es un problema con PHP, por lo que nos vamos a los logs de apache y encontramos lo siguiente:

[Wed Oct 17 00:25:36 2012] [error] [client 85.61.1.128] PHP Notice:  Use of undefined constant DRUPAL_ROOT - assumed 'DRUPAL_ROOT' in /home/web/www/sites/all/modules/civicrm/CRM/Core/Controller.php on line 332
[Wed Oct 17 00:25:36 2012] [error] [client 85.61.1.128] PHP Warning:  require_once(DRUPAL_ROOT/includes/errors.inc): failed to open stream: No such file or directory in /home/web/www/sites/all/modules/civicrm/CRM/Core/Controller.php on line 332
[Wed Oct 17 00:25:36 2012] [error] [client 85.61.1.128] PHP Fatal error:  require_once(): Failed opening required 'DRUPAL_ROOT/includes/errors.inc' (include_path='.:/home/web/www/sites/all/modules/civicrm:/home/web/www/sites/all/modules/civicrm/packages:.:/usr/share/php:/usr/share/pear') in /home/web/www/sites/all/modules/civicrm/CRM/Core/Controller.php on line 332

La constante DRUPAL_ROOT viene definida en el fichero index.php de drupal, por lo que debería estar definida, sin embargo a CiviCRM le llega vacía. Esto es debido a que en este servidor tenemos XCache, un optimizador para código PHP y librerías y que por lo visto no se lleva bien con civi.

La solución sería utilizar otro optimizador como APC en lugar de XCache. Si estamos en un servidor compartido probablemente no podremos hacer esto, por lo que hay que deshabilitar xcache añadiendo una línea al fichero .htaccess de drupal:

php_flag xcache.cacher 0

Con esto ya podremos volver a acceder a la parte de civicrm.

Etiquetas: