Best practice: debug vs production

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

Protože se na detekci prostředí nedá spoléhat, rád bych se zeptal, jak řešíte nastavení prostředí, debuggeru apod. ve vaší aplikaci v Nette. Nechci psát do zdrojáku natvrdo nastavování debug modu ať už přes nějakou IP; ideální by bylo ji nebo něco určujícího, které prostředí má být aktivní, mít v konfiguračním souboru, ale parametry z něj jsou k dispozici až potom, co se provede počáteční konfigurace (nechci dělat manuální parsování configu). Konkrétně a především mi jde o debug bar a výpis chybových hlášek, abych je nemusel (de)aktivovat ručně.

Zax
Člen | 370
+
0
-

Proč vymýšlet složitosti…
index.php

<?php
//require_once './Web/bootstrap_production.php';
require_once './Web/bootstrap_development.php';

Aspoň ten index k něčemu je :-)

Na localu si necháš odkomentovaný jeden řádek, na produkci druhý a prostě index necháš jak je. Víc automaticky to nejde :-D Když potřebuješ změnit, máš to na pět vteřin i s hledáním toho indexu.

Editoval Zax (17. 4. 2014 12:38)

matopeto
Člen | 395
+
0
-

robime to tak, ze na server si umiestnime subor enviromnment.php, ktory urcuje prostredie a potom v bootstrape:

<?php

// Detect and set environment.
if (file_exists(CONFIG_DIR . '/environment.php'))
	require_once CONFIG_DIR . '/environment.php';

if (!defined('ENVIRONMENT_NAME'))
	define('ENVIRONMENT_NAME', 'production');


$configurator->setDebugMode(ENVIRONMENT_NAME == 'development');


// Create Dependency Injection container from config.neon file
$configurator->addConfig(CONFIG_DIR . '/config.neon', ENVIRONMENT_NAME);
if (file_exists(CONFIG_DIR . '/config.local.neon'))
	$configurator->addConfig(CONFIG_DIR . '/config.local.neon', ENVIRONMENT_NAME);
?>
David Matějka
Moderator | 6445
+
0
-

do sveho apache si pridej pod spravny <virtualHost>

SetEnv NETTE_DEBUG "true"

v kodu

$configurator->setDebugMode(isset($_SERVER['NETTE_DEBUG']) && $_SERVER['NETTE_DEBUG'] == 'true');

stejne tak se to muze pouzit i v bashi

export NETTE_DEBUG=true

:)

akadlec
Člen | 1326
+
0
-

@matej21: tak to uz muze nastavit

SetEnv APP_ENV "prod"
SetEnv APP_ENV "dev"

a má to tak k dispozici i dale v appce ne?

matopeto
Člen | 395
+
0
-

Ale nie kazdy ma moznost nastavovat premenne v apache alebo v bashu. vlastny neverzovany sobor/konstanta/premenna je istejsie a viac „portable“ :)

David Matějka
Moderator | 6445
+
0
-

@matopeto: na vyvojovem serveru vetsinou muzes, ne? a na produkcnim nic byt nastaveno nemusi :)

@akadlec: ale je to zbytecny. v tom mem reseni se debug mod zapne pokud ta env promenna existuje – pokud ne (coz bude na produkci), tak se debug mod nezapne.

Editoval matej21 (17. 4. 2014 16:34)

matopeto
Člen | 395
+
0
-

To chapem, ze na lokale vacsinou clovek moze (ak chce, a vie ako na to…wampisti a xamppisti asi nie :)) ale pridava to skrytu zavislost. A nejde jednoducho prepnut ostry server do debug modu. (vyzaduje restart apache, ak ma vobec clovek k nemu pristup)
Podla mna to nie je best practice :)

David Matějka
Moderator | 6445
+
0
-

A nejde jednoducho prepnut ostry server do debug modu.

Pridat pod to radek $configurator->setDebugMode(TRUE); je slozity? :)

Tohle je proste jednoduchy oznaceni serveru, ze je vyvojovy, bez ohledu na to, kdo je klient.

Editoval matej21 (17. 4. 2014 18:38)

akadlec
Člen | 1326
+
0
-

@matej21: já to spíš myslel tak, že ty to pojmenuješ NETTE_DEBUG a to já bych raději pojmenoval APP_ENV a pak kdekoliv jinde kde potřebuješ zjistit zda si v produkci či devu se můžeš optat na tuto environment proměnnou ne? Jako že to bude více sebepopisující ;)

matopeto
Člen | 395
+
0
-

matej21 napsal(a):

A nejde jednoducho prepnut ostry server do debug modu.

Pridat pod to radek $configurator->setDebugMode(TRUE); je slozity? :)

Ale musis sahat do kodu.

Zax
Člen | 370
+
0
-

Osobně mám rád jednoduchá a přímočará řešení a docela se mi líbí, jak to řeší matopeto, akorát osobně bych si to trochu ještě zjednodušil:

<?php
if(file_exists('./development.txt')) {
	// např.:
	require_once './Web/bootstrap_development.php';
} else {
	// např.:
	require_once './Web/bootstrap_production.php';
}

Prostě jen kontrola existence development.txt, nic víc. Dá se to pro ostrý server celkem dobře využít a do development části si dát něco ve stylu if not moje ip then die(obsah development.txt). Vývojář pak potřebuje něco změnit na ostrém serveru a může jednoduchým způsobem informovat návštěvníky (a nemusí nikde složitě hledat, kde to nastavit).

akadlec
Člen | 1326
+
0
-

tak to ja bych to zjednosušil ještě více:

require_once './Web/bootstrap.php';

a proč takhle? pokud už teda dva bootstrapy, tak na server si dát jeden file a na local druhy, je dle mě zbytečné cpát na server dev konfigy, soubory atd…

@matopeto: a ve tvém případě snad není potřeba sahat do kodu pokud chceš na produ aktivovat laděnku aspol? já bych řek že ano, buď budeš muset přepsat ten tvuj file, nebo jej přejměnovat atd, prostě vždy tam budeš muset nějak zasáhnout.

Zax
Člen | 370
+
0
-

Tak samozřejmě není třeba používat dva bootstrapy, že… proto jsem tam napsal to „např“.

Jinak dva bootstrapy mám spíš z „historických“ důvodů: když jsem s Nette začínal, tak mi prostě přišlo fajn mít to oddělené, čekal jsem, že se mi bootstrapy budou nějak zásadně lišit a že jinak to bude samé if development do something else do something else. No a v současnosti si spíš hraju přímo s tím frameworkem a dva bootstrapy zatím nic nerozbily, tak jsem na to dosud ani nešáhl. Jinak configy to načítá stejné, akorát mám navíc ještě development.neon a production.neon. V development.neon nastavuji laděnku, v production.neon nastavuji errorPresenter. To snad doufám není úplná hloupost…

Editoval Zax (18. 4. 2014 14:06)

Filip Procházka
Moderator | 4668
+
0
-

Mně by zajímalo jak jsi přišel na to, že autodetekce je nespolehlivá. Mně funguje výborně.

matopeto
Člen | 395
+
0
-

akadlec napsal(a):
@matopeto: a ve tvém případě snad není potřeba sahat do kodu pokud chceš na produ aktivovat laděnku aspol? já bych řek že ano, buď budeš muset přepsat ten tvuj file, nebo jej přejměnovat atd, prostě vždy tam budeš muset nějak zasáhnout.

Ale je rozdiel sahat do kodu (aplikacneho, verzovaneho) a do kodu (suboru, lokalneho, neverzovaneho), jedno je zasah do aplikacie, druhe do prostredia.

Editoval matopeto (18. 4. 2014 18:26)

Jironett
Člen | 3
+
0
-

To by mě taky zajímalo v čem je autodetekce nespolehlivá, jak se vám to projevuje?

akadlec
Člen | 1326
+
0
-

tak ono stačí mít jako dev server cokoliv co je venku a nemá ipčku 127.0.0.1 a hned to detekuje jako produkční ne?

akadlec
Člen | 1326
+
0
-

@matopeto: Mno hele pokud použiješ konstantý prostředí tak nešaháš ani na kod a ani na soubory…jen si pozměníš konfig apache a pak jen /etc/init.d/apache restart a hotovo ;)

matopeto
Člen | 395
+
0
-

Ano to suhlasim, pokial ma clovek pristup k apache (a restart apache tiez nie je na produkcii vhodny, bavim sa teraz o prepnutie v produkcnom prostredi na debug), tak je i tato moznost dobra. Len ako som napisal, je to skryta zavislost, a preto to podla mna nie je best practice :)

Aurielle
Člen | 1281
+
0
-

Pokud máš dev server, tak na něm velice pravděpodobně i častěji upravuješ kód, nevidím důvod, proč tedy aplikaci manuálně do dev módu nepřepnout a místo toho vymýšlet obskurity, co padly v tomhle threadu…