Best practice: debug vs production
- sKopheK
- Člen | 207
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
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
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
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
:)
- David Matějka
- Moderator | 6445
@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
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
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)
- Zax
- Člen | 370
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
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
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
Mně by zajímalo jak jsi přišel na to, že autodetekce je nespolehlivá. Mně funguje výborně.
- matopeto
- Člen | 395
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)
- matopeto
- Člen | 395
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 :)