[2008-11-24] Přidán Debug::$produc­tionMode

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8221
+
0
-

Aby bylo chování Nette\Debug lépe srozumitelné, přidal jsem přepínač Debug::$productionMode, udávající, zda Debug běží v produkčním nebo vývojovém prostředí (TODO: nenazvat ho konzistentněji $liveMode?)

Jde spíše o refactoring kódu, na funkci (rostlináře) by to nemělo mít žádný vliv :-) Výjimkou je funkce Debug::dump(), která v produkčním režimu filtruje citlivá data.


Debug je užitečný fault barrier, která umí nezachycené výjimky podle potřeby zobrazit, zalogovat do souboru, zalogovat do Firebugu nebo obeslat administrátora emailem. Dosud však byla nevyřešená otázka, jak chování rozšířit, konkrétně jak na produkčním serveru zobzrazit vlastní chybovou stránku a přitom zachovat logovací schopnosti třídy Debug. Problém se týkal i třídy Appliaction – fault barrier byla buď ona, nebo Debug.

Takže podporovaný postup je tento:

Debug::enable(); // Debug is fault barrier

set_exception_handler('myBarrier'); // set user barrier

function myBarrier($exception)
{
	echo 'Something is wrong...';
	Debug::processException($exception); // delegate to Debug
}

// ... application code

nebo alternativně:

Debug::enable(); // Debug is fault barrier

try {
	// ... application code
} catch (Exception $e) {
	echo 'Something is wrong...';
	Debug::processException($e); // delegate to Debug
}

Delegování už podporuje i Application.

ViliamKopecky
Nette hipster | 230
+
0
-

Jsem pro $liveMode

První možnost by se mohla určitě zapouzdřit do Nette.


Máš chybku u alternativního příkladu: $e vs $exception

Editoval enoice (1. 11. 2008 16:47)

A.
Člen | 87
+
0
-

Jsem pro $productionMode, me veci jsou „live“ i na lokalu :-).

romansklenar
Člen | 655
+
0
-

Já bych se spíše zase naopak naklonil k $liveMode. $productionMode by mohl dělat zmatky s názvem prostředí PRODUCTIONNette\Environment.

phx
Člen | 651
+
0
-

Chapu to dobre ze se resi pojmenovani promene? Zda $productionMode nebo $liveMode? V podstate jedna je negaci druhe? Osobne bzch se drzelo logiky v Nette. Tz. Debug::setMode(Debug::PRODUCTION).

Dale by bylo fajn aby si toto nastaveni detekovalo samo z Nette.

deric
Člen | 93
+
0
-

Bylo by fajn, kdyby název byl samovysvětlující, což mi tak v případě $liveMode nepřipadá. Takže jsem pro $productionMode.

A.
Člen | 87
+
0
-

deric napsal(a):

Bylo by fajn, kdyby název byl samovysvětlující, což mi tak v případě $liveMode nepřipadá. Takže jsem pro $productionMode.

Tak tak, uz nyni je v Environmentu trochu rozepre v name vs. mode. Byl bych pro celkove zruseni live modu (kterymi mi taky neprijde samovysvetlujici) a jeho nahrazeni ustalenym vyrazem production.

David Grudl
Nette Core | 8221
+
0
-

deric napsal(a):

Bylo by fajn, kdyby název byl samovysvětlující, což mi tak v případě $liveMode nepřipadá. Takže jsem pro $productionMode.

A. napsal(a):

Tak tak, uz nyni je v Environmentu trochu rozepre v name vs. mode. Byl bych pro celkove zruseni live modu (kterymi mi taky neprijde samovysvetlujici) a jeho nahrazeni ustalenym vyrazem production.

Ok, něco na tom je.

A.
Člen | 87
+
0
-

Asi se zmenila promenna useFirebug na private (popr. byl odendan seter). Zamerne? Mam firebug, ale mam ho radsi vypnuty, protoze si tech erroru jinak nevsimnu.

David Grudl
Nette Core | 8221
+
0
-

A. napsal(a):

Asi se zmenila promenna useFirebug na private (popr. byl odendan seter). Zamerne? Mam firebug, ale mam ho radsi vypnuty, protoze si tech erroru jinak nevsimnu.

Zapíná a vypíná se to automaticky, jak zapneš/vypneš FirePHP.

A.
Člen | 87
+
0
-

Jeste by se v Application mela vyhodit ta vyjimka, ktera se vytvori v checku na $hasError, pokud selhal ErrorPresenter.

David Grudl
Nette Core | 8221
+
0
-

ne, na produkčním serveru se musí výjimka vždy zachytit.

A.
Člen | 87
+
0
-

Jo pravda, mel sem to puvodne obracene.

Jeste v souvislosti s tim ErrorPresenterem, trochu si s tim hraju, poprve se mi ErrorPresenter vykresli spravne, ale podruhe mi zkolabuje $session->start(), snazi se to volat wakeup() na objekt typu Component (tedy asi na presenter, zatim sem to nezjistoval) :-/. A zatim netusim, kde je problem, ten error presenter nic nedela.

EDIT: Hmm, tak je to nejaka normalni komponenta, kterou mam na strance v layoutu. Ale proc se vola __wakeup to fakt nechapu, a kdyz odstranim to vyhozeni vyjimky z wakeup tak to funguje :-/.

Editoval A. (26. 11. 2008 0:17)

David Grudl
Nette Core | 8221
+
0
-

A. napsal(a):

Jo pravda, mel sem to puvodne obracene.

Jeste v souvislosti s tim ErrorPresenterem, trochu si s tim hraju, poprve se mi ErrorPresenter vykresli spravne, ale podruhe mi zkolabuje $session->start(), snazi se to volat wakeup() na objekt typu Component (tedy asi na presenter, zatim sem to nezjistoval) :-/. A zatim netusim, kde je problem, ten error presenter nic nedela.

Zkopíruj sem celý callstack.