2012-09-19 14 views
6

Estoy trabajando en un proyecto utilizando Silex. En un archivo en particular, he agregado una declaración use para que el autocargador incluya un archivo php particular. Más adelante en el archivo, uso esa clase. Todo está bien en el servidor de desarrollo, pero cuando paso a la producción, recibo un mensaje de Fatal error: Class not found. Editar: Ambos servidores ahora usan PHP 5.4.4.Error de clase no encontrada solo en el servidor de producción

¿Hay algún tipo de problemas específicos de instalación que puedan estar causando esto? Puedo confirmar que los dos archivos de carga automática del espacio de nombres generados por el compositor son los mismos.

Sólo por el bien de minuciosidad, aquí es la declaración incluyen:

use Instaphp; 

Aquí está el uso de la clase más adelante en el código:

$app['instaphp'] = $app->share(function() use ($app) { 
      if($app['tagframe.instagram_token'] === null) { 
       return Instaphp\Instaphp::Instance(); 
      } else { 
       return Instaphp\Instaphp::Instance($app['tagframe.instagram_token']); 
      } 
     }); 

     $app['instaphp.config'] = $app->share(function() use ($app) { 
      return Instaphp\Config::Instance(); 
     }); 

Aquí es el error exacto:

Fatal error: Class 'Instaphp\Config' not found in /var/www/silexsandbox/src/TagFrame/Silex/TagFrameServiceProvider.php on line 89 

Actualización: Debo añadir que no he experimentado tales errores en ningún otro lugar en el l arge code base en la que estoy trabajando, así que sé que no es tan simple como que TODOS los espacios de nombres no funcionen.

+0

Puede sonar trivial, pero ¿está seguro de haber instalado los proveedores (o actualizado después del último cambio) en el servidor de producción? – Maerlyn

+0

¿Está ejecutando PHP-FPM? Quizás con APC habilitado? ¿Puedes intentar recargar a los trabajadores de FPM? – igorw

Respuesta

5

De forma predeterminada, Mac utiliza un sistema de archivos insensible a mayúsculas/minúsculas. Linux, dependiendo de tu sabor, principalmente distingue entre mayúsculas y minúsculas. Esto definitivamente dará como resultado el comportamiento que describió anteriormente.

Le sugiero que cree una segunda partición en su Mac y la formatee como Journaled Case-Sensitive para que coincida con su entorno de producción.

+1

De hecho, puede formatear otra partición en modo sensible a mayúsculas y minúsculas en osx, pero no parece ser recomendable para su partición del sistema operativo, ya que algunas aplicaciones no se ejecutarán. Ejemplo: Photoshop https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html Probablemente esté bien tener otra partición como esta :) – GabLeRoux

4

Gracias por los comentarios. Me aseguré de actualizar utilizando Composer para que el autocargador fuera objeto de dumping.

El problema (como descubrí después de horas de manipulación) era que la estructura de directorios de la biblioteca de terceros que estaba usando (Instaphp) era minúscula. Esto no le dio un problema a mi Mac, pero el servidor de producción está ejecutando Ubuntu, que supongo utiliza utilidades de manejo de archivos con distinción entre mayúsculas y minúsculas, donde Mac no lo hace.

¡Me estoy pateando para pasar una noche en esto!

Cuestiones relacionadas