2012-09-19 6 views
6

Sto lavorando a un progetto utilizzando Silex. In un file particolare, ho aggiunto un'istruzione use per fare in modo che il caricatore automatico includa un particolare file php. Più avanti nel file, io uso quella classe. Tutto va bene sul server di sviluppo, ma quando passo alla produzione, ottengo un messaggio Fatal error: Class not found. Modifica: entrambi i server ora utilizzano PHP 5.4.4.Errore di classe non trovato solo sul server di produzione

Sono presenti problemi di installazione specifici che potrebbero causare questo? Posso confermare che entrambi i file autoload generati dallo spazio dei nomi generati dal compositore sono gli stessi.

Solo per ragioni di completezza, ecco l'istruzione include:

use Instaphp; 

Ecco l'utilizzo della classe più avanti nel codice:

$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(); 
     }); 

Ecco l'errore esatto:

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

Aggiornamento: Devo aggiungere che non ho riscontrato errori di questo tipo in nessun altro sto lavorando a codice base, quindi so che non è così semplice come TUTTI gli spazi dei nomi non funzionano.

+0

Può sembrare banale, ma siete sicuri di aver installato i fornitori (o aggiornato dopo l'ultima modifica) sul server di produzione? – Maerlyn

+0

Stai eseguendo PHP-FPM? Forse con APC abilitato? Puoi provare a ricaricare i lavoratori della FPM? – igorw

risposta

5

Per impostazione predefinita, Mac utilizza un file system senza distinzione tra maiuscole e minuscole. Linux, a seconda del tuo gusto, per lo più è case-sensitive. Ciò comporterà sicuramente il comportamento che hai descritto sopra.

Ti suggerisco di creare una seconda partizione sul tuo Mac e formattarla come Journaled Case-Sensitive per adattarla al tuo ambiente di produzione.

+1

Si può effettivamente formattare un'altra partizione in modalità maiuscole e minuscole su osx, ma non sembra essere consigliata per la propria partizione os in quanto alcune applicazioni non riusciranno a funzionare. Es: Photoshop https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html Probabilmente è ok avere un'altra partizione come questa :) – GabLeRoux

4

Grazie per i commenti. Mi sono assicurato di essere aggiornato usando Composer in modo che il caricatore automatico venisse scaricato.

Il problema (come ho scoperto dopo ore di manipolazione) era che la struttura di directory per la libreria di terze parti che stavo usando (Instaphp) era minuscola. Questo non ha dato al mio Mac un problema, ma il server di produzione sta eseguendo Ubuntu, che suppongo utilizza utilità di gestione file sensibili al maiuscolo/minuscolo in cui il Mac non lo fa.

Sono totalmente preso a calci me stesso per passare una notte su questo!