Problém s PHP 5.2.0–8+etch13
- leninzprahy
- Člen | 150
Na fóru David píše že verze 5.2.0 by měla být podporovaná, ale asi je špatně ještě něco, protože start aplikace končí chybou:
PHP Fatal error: Uncaught exception 'ApplicationException' with message 'An error occured while executing error-presenter' in ... htdocs/libs/Nette/Application/Application.php:186]
Stack trace:
#0 /data/www/kulaty.net/htdocs/app/bootstrap.php(94): Application->run()
#1 /data/www/kulaty.net/htdocs/www/index.php(16): require('/data/www/kulat...')
#2 {main}
Přitom v Requirements Checker ani v phpinfo žádný problém nevidím.
Řešilo se to ještě v jednom tématu zde na fóru, ale už je bohužel uzavřeno a řešení je hodně obecné.
Verzi Nette jsem zkoušel 0.8 i 0.9, aktuálně Nette Framework 0.9 (revision 332)
Nějaký nápad?
Ještě dodám že hosting je poměrně cenově výhodný, takže změna je až krajní řešení.
- romansklenar
- Člen | 655
Toto nebude problém PHP ;) doporučuju nastartovat laděnku a podívat se na
výjimku, která zhodila ten error-presenter v části
Caused-By
.
Příště lépe hledat ;)
- PetrP
- Člen | 587
Jinými slovy kdyby předchozí příspěvek nebyl pochopen.
Po nějaké chybě se volá ErrorPresenter, v kterém nastává taky chyba; aby
se takle necyklilo do nekonečná tak se aplikace násilně ukončí. Laděnku
nastartujete takto:
Debug::enable(Debug::DEVELOPMENT);
Případně ještě zakažte aplikaci zachytávat chyby
Environment->getApplication()->catchExceptions =false;
- leninzprahy
- Člen | 150
Díky za rychlé a hlavně přínosné reakce, problém opravdu nebyl ve verzi PHP, ale v připojení k databázi.
Laděnku jsem měl nastartovanou a nastavenou aby
logovala Debug::enable(NULL, '%logDir%/php_error.log');
až nastavením
Environment::getApplication()->catchExceptions = false;
se do
logu dostala DibiDriverException
Část Caused-By
jsem jaksi přehlédl a proto jsem nenašel
první chybu
Cannot load presenter 'Error', class 'ErrorPresenter' was not found ....
z čehož si odnáším ponaučení laděnku čti pozorně a vždy až do konce
Mám ale ještě jeden dotaz, pokud laděnku nastavím
Debug::enable(Debug::DEVELOPMENT);
a nezakážu aplikaci
zachytávat vyjímky, laděnka se neukáže a start aplikace končí
s 500 Internal Server Error
Čekal bych, že mi bude vesele vyskakovat.
Ještě jednou děkuji za odpovědi, a prosím o přejmenování tohoto tématu nějak výstižněji, např. „Problém se zachytáváním vyjímek na produkčním serveru“, pokud je to možné.
Příště se budu snažit hledat lépe :)
- kravčo
- Člen | 721
leninzprahy napsal(a):
… laděnka se neukáže a start aplikace končí s
500 Internal Server Error
Čekal bych, že mi bude vesele vyskakovat.
Ja som mal rovnaký problém pri IIS+PHP, aj v ladiacom režime to hádzalo vlastnú 500 stránku servera. Mne pomohlo dočasne! vypnúť posielanie HTTP headra 500, zamenil som ho za 200 (resp. zakomentoval) a ladenka sa zobrazila. Samozrejme ladenka s výpisom do prehliadača na produkčnom servri nie je nič moc… Síce by ju webboty vďaka
<meta name="robots" content="noindex,noarchive">
nemali indexovať, ale aj tak s týmto opatrne…
- PetrP
- Člen | 587
leninzprahy napsal(a):
Mám ale ještě jeden dotaz, pokud laděnku nastavím
Debug::enable(Debug::DEVELOPMENT);
a nezakážu aplikaci zachytávat vyjímky, laděnka se neukáže a start aplikace končí s500 Internal Server Error
V první řadě Debug::DEVELOPMENT
nastavovat pouze v takto
krizových situacích, místo něho volit Debug::DETECT
(neboli
NULL
). A buď nechat rozhodovat aplikaci samotnou, nebo si
nastavovat vývojový/produkční prostředí v Environment
např
podle ip:
if ($_SERVER['REMOTE_ADDR']=='0.0.0.0') Environment::setMode('production',false);
Tak v případě že výjimky zachytává aplikace, tak laděnku k slovu
nepustí, ale snaží se spustit ErrorPresenter
(Presenter::$errorPresenter
) a když ho nenajde tak vyhodí
500
.
Čekal bych, že mi bude vesele vyskakovat.
Laďenka v takovémto případě jen loguje.
Editoval PetrP (2. 6. 2009 19:56)