Při vyhození výjimky (v komponentě z widget) mrzne apache

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

Předně, mám nainstalovaný Apache/2.2.10 (Win32) PHP/5.2.4 a používám nejnovější revizi Nette z SVN (momentálně 410).

Problém: Pokud mám v šabloně použitý widget (např. {control item}) a daná komponenta ještě nebyla inicializována pomocí ->getComponent(‚item‘) a je přitom vyhozena výjimka, tak se mi zaseká celý apache, procesor se vytíží na 98% procent a musím apache ručně restartovat.

U komponent používám vylepšenou komponentu přímo z Nette. Má někdo podobnou zkušenost nebo nějaký nápad, proč je se apache a php takhle chová? Pokud je to verzí, tak nebude problém přeinstalovat.

Editoval ales.kafka (14. 7. 2009 2:17)

Jod
Člen | 701
+
0
-

Skôr bude problém v kóde widget, lebo mne to nemrzlo pri chybe.

ales.kafka
Člen | 34
+
0
-

Momentální stav je takový, že se vyhodí výjimka a apache zamrzne až při generování bluescreenu – přesněji v sekci Call Stack; ještě konkrétněji je to při vypisování source code z Control→ getWidget () šablony.

Mezitím se chystám na upgrade apache a na php 5.2.10, tak uvidím, zda chybu neprodukuje zastaralé nádobíčko.

pro jistotu tu napíšu i minimální kousek kódu, který mi vyvolává zmíněnou chybu.

TestPresenter.php

<?php

class TestPresenter extends Presenter {

	protected function createComponentTest()
	{
		throw new Exception("Zkouška");
	}
}

?>

default.phtml.

{control test}

Aktualizováno na Apache/2.2.11 (Win32) PHP/5.2.10 a chyba přetvrvává.

Editoval ales.kafka (14. 7. 2009 11:43)

David Grudl
Nette Core | 8228
+
0
-

Na Apache/2.2.11 (Win32) PHP/5.2.9–2 se mi to nedaří reprodukovat.

ales.kafka
Člen | 34
+
0
-

Tak, chyba nalezena. Vyzkoušel jsem čistou aplikaci s jedním Presenterem a zde to chybu nedělalo. Tak jsem postupně vyhazoval jednotlivé části a zkoušel chování. Bylo to způsobeno vlastní nedbalostí, kdy jsem v bootstapu zapomněl nastavení

<?php
Debug::$maxDepth = 99;
?>

a tím pádem se některá část bluescreenu natahovala tak dlouho, až odvařila celý apache.

Zda tam je nějaký bug netuším, protože pokud se výjimka vyhodila během

<?php
->getComponent('test');
?>

, tak se vše načítalo průměrně rychle, ale při

{control test}

nastala ona chyba. Aspoň mě to přinutilo k instalaci php 5.2.10 a nové verze apache.

muta
Člen | 21
+
0
-

dělá mi teď to samé – při prvním načtení komponenty ( ať už v šabloně nebo presenteru) se zobrazí bílá stránka a apache jde do věčných lovišť.

Debug::$maxDepth = 99; // to jsem ani nenastavoval

win 7

PHP 5.2.9–2

Apache/2.2.11 (Win32) PHP/5.2.9–2

Nette Framework 0.9 (revision 8de354c released on 2009–08–21)

// edit

Vyřešeno

Dělal to řádek parent::createComponent($name);

viz:

<?php
protected function createComponentEditForm() {
 parent::createComponent($name);
 ....
}
?>

nahodil mi to tam automaticky netbeans a pokud jsem ten řádek umáz, tak vše funguje jak má !

snad to někomu pomůže :)

Editoval muta (23. 8. 2009 23:43)