PHP Fatal error: Class ‚BasePresenter‘ not found

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
BigCharlie
Člen | 283
+
0
-

Narazil jsem na tuhle chybu za následujících okolností:

  • žádná změna ve zdrojových souborech!
  • přes týden bezproblematického běhu od poslední úpravy zdrojových souborů
  • nepošle se e-mail, naprosto nesmyslně je jako e-mail zadáno „%logDir%/php_error.log“
  • stačí smazat temp, vše naskočí

Problémem je, že tu chybu nedokážu vždy přesně reprodukovat. V několika případech se mi podařilo při vyšším zatížení (kontrola odkazů pomocí Xenu) docílit toho, že najednou přestal web odpovídat a vyhazovat tuhle chybu. Ovšem neumím ji vyvolat cíleně.

Zatím jsem to dočasně vyřešil pomocí $loader->autoRebuild = Environment::isProduction() ? TRUE : FALSE, ale zajímá mě příčina.

Napadá někoho, po čem koukat?

Nette: 0.9.3
PHP: 5.2.12
Nastavení Laděnky

<?php
$emailHeaders = array(
    'From' => 'xxx',
    'To'   => 'xxx',
    'Subject' => 'Nette - Chyba na serveru %host%',
    'Body' => "%date% - %message%.\n\nPro více informací shlédněte error log.",
);
Debug::enable('127.0.0.1, xx.xx.xx.xx', Debug::DETECT, '%logDir%/php_error.log', $emailHeaders);
?>
Aurielle
Člen | 1281
+
0
-

Řekl bych, že v druhém parametru má být název logového souboru, Debug::DETECT tam nemá co dělat.

BigCharlie
Člen | 283
+
0
-

Aha, tím se vyřešil problém s odesíláním, místo abych výčtem adres nahradil Debug::DETECT, vložil jsem to před. Tam bych určitě chybu nehledal, přesvědčen o své neomylnosti, díky!

Ale co ten zbytek? Kde hledat příčinu té chyby?

Honza Kuchař
Člen | 1662
+
0
-

To se už snad dozvíš od Laděnky.

BigCharlie
Člen | 283
+
0
-

Laděnka toho bohužel v tu chvíli moc neřekne:

Fatal error: Class ‚BasePresenter‘ not found

Line  8:    class ErrorPresenter extends BasePresenter

Jinak nic podstatného. A teď jsem si ověřil, že to dokážu sestřelit kdykoliv puštěním více instancí Xenu (kontroluju tím odkazy). V mém případě stačí tři a spolehlivě to během chvíle klekne.

Dál jsem ověřil, že problém způsobuje zcela jistě RobotLoader – v tempu v jeho adresáři jsou dva soubory – při normálním provozu je jeden z nich o velikosti cca 7KB a ten samý při pádu má necelých 200 bajtů. Stačí je smazat a vše začne fungovat normálně.

jasir
Člen | 746
+
0
-

Moc jsem to nezkoumal, jen si vzpomínám, že tu nedávno bylo něco podobného. Nemůže to být stejný problém jako tady ?

Pak by stačila nová revize.

BigCharlie
Člen | 283
+
0
-

Aha, vypadá to, že to je ono. Otestuji a dám vědět.

BigCharlie
Člen | 283
+
0
-

Tak potvrzuji, jasir to trefil, jde o stejný problém, oprava to (jak se zatím zdá), řeší. Díky.