2012-09-19 26 views
6

Pracuję nad projektem przy użyciu Silex. W konkretnym pliku dodałem instrukcję use, aby autoloader zawierał konkretny plik php. Później w pliku używam tej klasy. Wszystko dzieje się dobrze na serwerze programistycznym, ale kiedy przejdę do produkcji, otrzymuję komunikat Fatal error: Class not found. Edytuj: oba serwery używają teraz PHP 5.4.4.Błąd klasy nie znaleziono tylko na serwerze produkcyjnym

Czy są jakieś problemy związane z instalacją, które mogą być przyczyną? Mogę potwierdzić, że oba automatyczne pliki przestrzeni nazw generowane przez kompozytora są takie same.

Właśnie w trosce o staranność, tutaj jest oświadczenie obejmuje:

use Instaphp; 

Tutaj jest wykorzystanie klasy później w kodzie:

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

Oto dokładny błąd:

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

Aktualizacja: Powinienem dodać, że nie doświadczyłem takich błędów nigdzie indziej w l baza kodu Arge, nad którą pracuję, więc wiem, że to nie jest tak proste, jak WSZYSTKIE przestrzenie nazw nie działają.

+0

Może brzmi banalnie, ale czy na pewno zainstalowałeś dostawców (lub zaktualizowałeś po ostatniej zmianie) na serwerze produkcyjnym? – Maerlyn

+0

Czy używasz PHP-FPM? Być może z włączonym APC? Czy możesz spróbować ponownie załadować pracowników FPM? – igorw

Odpowiedz

5

Domyślnie komputery Mac używają systemu plików niewrażliwego na kronikę. Linux, w zależności od Twojego gustu, w większości jest rozróżniana wielkość liter. To z pewnością spowoduje zachowanie opisane powyżej.

Proponuję utworzyć drugą partycję na komputerze Mac i sformatować ją jako Chroniona wielkość liter w celu dopasowania do środowiska produkcyjnego.

+1

Rzeczywiście można sformatować inną partycję w trybie rozróżniania wielkości liter w osxie, ale nie jest ona zalecana dla partycji OS, ponieważ niektóre aplikacje nie będą działać. Przykład: Photoshop https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html Prawdopodobnie dobrze jest mieć drugą partycję taką jak ta :) – GabLeRoux

4

Dzięki za komentarze. Upewniłem się, że zaktualizowałem używając Composer, tak aby autoloader był porzucony.

Problem (jak dowiedziałem się po godzinach gry na skrzypcach) polegał na tym, że struktura katalogów używanej przeze mnie biblioteki (Instaphp) była pisana małymi literami. To nie sprawiło, że mój komputer Mac miał problem, ale serwer produkcyjny uruchamia Ubuntu, który, jak przypuszczam, używa narzędzi rozróżniania wielkości liter, w których Mac nie działa.

Całkowicie kopie się za spędzanie nocy na tym!

Powiązane problemy