Environment::setMode(), setName(), konfigurace a přepínání režimů
- David Grudl
- Nette Core | 8227
Chystám novou implementaci přepínání režimů development/production, aby se zamezilo veškerým nejasnostem. Měl bych několik kvízových dotazů (samozřejmě nemusíte odpovídat na vše)
Debug::enable()
- nastavujete někdy druhý parametr (cesta k logu)?
- nastavujete někdy třetí parametr skrze pole?
třída Environment:
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu? - využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
? - využíváte nějak
setName()
? - jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
- využíváte proměnné prostředí a jak?
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Díky!
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Chystám novou implementaci přepínání režimů development/production, aby se zamezilo veškerým nejasnostem. Měl bych několik kvízových dotazů (samozřejmě nemusíte odpovídat na vše)
Debug::enable()
- nastavujete někdy druhý parametr (cesta k logu)?
Ano, pokud by se to udělalo samo (udělá?), nepotřeboval bych.
- nastavujete někdy třetí parametr skrze pole?
Jako víc mailů? Ne. (To jde?)
třída Environment:
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
Encoding a lang neznám, lang bych asi využil. LogDir v Ormionu, kdysi jsem používal templatesDir.
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu 5) využíváte nějaksetName()
?
O těchto metodách jsem přemýšlel, když mi na jednom projektu selhala autodetekce prostředí. Nakonec jsem nastavil v configu v sekci development, že se má chovat jako production.
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
- využíváte proměnné prostředí a jak?
Docela jo. Jednak si ukládám jazyk, aby byl globálně dostupný, jinak na různá nastavení.
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Ne.
Díky!
- Ondřej Mirtes
- Člen | 1536
Debug::enable – druhý jde nastavit přes nastavit přes proměnnou %logDir%, třetí parametr nastavuju jako pole:
array(
'From' => 'nette@%host%',
'To' => $debugConfig->admin,
'Subject' => 'Server error at %host%',
'Body' => '%date% - %message%. View error log for more information.',
));
ale asi to není nutné.
BTW: Hodilo by se vědět, jaké všechny proměnné %var% Laděnka v tomto parametru zná, nikde jsem to nenašel.
- setMode() / getMode() – jen pro nastavení DEVELOPMENT/PRODUCTION. To se snad jinak ani nedá, ne? :)
- lang je předdefinovaná? Jak se detekuje? Používám ji, ale nastavuju si ji sám. %logDir% přenastavuji na vlastní cestu a %encoding% využívám na pár řádcích v bootstrapu, které tam jsou tuším už z defaultního Skeletonu.
- setName() se hodí týmu vývojářů (od dvou výš :)), už jsem několikrát viděl, že mají v nějakém souboru developer.php, který includují do bootstrapu a který neverzují, volání setName() se jménem vývojáře – načítá se podle toho jeho sekce v configu.
- Nepotřeboval jsem.
- Akorát lang. Ale hodí se je mít, nic bych s nimi nedělal.
- Ne.
Magii okolo setMode() a setName() stále moc nechápu. Podle čeho se bere chování aplikace, když nastavím setName()? Zůstává autodetekce? Vezme se sekce z configu, od které ta pojmenovaná dědí?
- pekelnik
- Člen | 462
David Grudl napsal(a):
Chystám novou implementaci přepínání režimů development/production, aby se zamezilo veškerým nejasnostem. Měl bych několik kvízových dotazů (samozřejmě nemusíte odpovídat na vše)
Debug::enable()
- nastavujete někdy druhý parametr (cesta k logu)?
Vždy. Bylo by prima kdyby se cesta k logu automaticky expandovala a zemezilo se nutnosti volat Environment::expand().
- nastavujete někdy třetí parametr skrze pole?
Ne.
třída Environment:
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu?
Myslím, že to nepoužívám. Nicméně na zjištění production režimu to jistě není k zahození.
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
Ano. %encoding% – někde se nastavuje kódování pro mb_* funkce, %lang% ne – jazyk mám v persistentním parametru – ale teď mě vlastně napadá, že jazyk ukládám i do proměnné language – takže odpověď je ne :), %logsDir% nastavuji sám a používám
- využíváte nějak
setName()
?
Ne.
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
Neřeším.
- využíváte proměnné prostředí a jak?
Ano. Jsme prakticky v každodenním styku :) Především s možnostmi, které poskytuje expandování je to skvělá věc. Líbilo by se mi kdyby Environment::expand() mělo nějakou zkratku, ale klidně si ji udělám sám ;) expand() rulez
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Využívám prostředí – na mód spoléhám :)
Díky!
Taky!
- Ondřej Mirtes
- Člen | 1536
Když už jsme u těch proměnných prostředí, neustále oplakávám
templatesDir
, protože tuším, že vždy obsahovala správnou
cestu do složky se šablonami, a to i v nové modulové struktuře
(app/FrontModule/templates) – teď aby si to člověk cucal z prstu anebo
hardcodoval.
- _Martin_
- Generous Backer | 679
Debug::enable()
- nastavujete někdy druhý parametr (cesta k logu)?
viz. 4)
třída Environment:
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
Proměnnou logDir
měním v bootstrapu v závislosti na tom,
jaká appka startuje. Ale proč jsem to onehdá neimplementoval jako parametr
Laděnce, to už si nepamatuji.
- využíváte nějak
setName()
?
Ano: mám několik prostředí (produkční, testovací, vývojové), v bootstrapu definované IP pro různá prostředí a na základě těchto IP se vybere vhodné prostředí.
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
Jak je to myšleno?
- využíváte proměnné prostředí a jak?
Proměnnou appDir
pro vlastní hledání šablon v presenterech
(metody format...
).
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Viz. 5) + v bootstrapu vybírám prostředí a u každého je v configu nastaven mód.
- Ondřej Brejla
- Člen | 746
David Grudl napsal(a):
Chystám novou implementaci přepínání režimů development/production, aby se zamezilo veškerým nejasnostem. Měl bych několik kvízových dotazů (samozřejmě nemusíte odpovídat na vše)
Debug::enable()
- nastavujete někdy druhý parametr (cesta k logu)?
Ano
- nastavujete někdy třetí parametr skrze pole?
Ne
>
třída Environment:
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu?
Ne
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
Ne
- využíváte nějak
setName()
?
Vůbec
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
Těžko…radši se tomu vyhýbám :-)
- využíváte proměnné prostředí a jak?
Občas
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Ano
>
Díky!
- Patrik Votoček
- Člen | 2221
Debug::enable()
- vystačím si s %logDir% v configu
- ne string → e-mail
třída Environment:
- použil jsem jednou. Jinak používám spíš
Nette\Environment::isProduction()
- kromě lang ano
- co to je? to tam jako fakt je?
- trochu jsem nepochopil otázku možná protože to asi nepoužívám
- mam konfiguraci aplikace option_example kterou tam l8duju z DB a pak hojne
používám. Nicméně mám pro to
alias
Nella\CMS::getOption($name, $default = NULL);
- poslední dobou hodně zvažuju že v aplikacích zavedu TEST mod
EDIT: z diskuse to vypadá že setMode()
a
setName()
je něco podobného jaký je mezi nima rozdíl?
Editoval vrtak-cz (12. 4. 2010 13:19)
- David Grudl
- Nette Core | 8227
Honza Marek napsal(a):
Ano, pokud by se to udělalo samo (udělá?), nepotřeboval bych.
Můžeš to prosím rozvést?
pekelnik napsal(a):
Vždy. Bylo by prima kdyby se cesta k logu automaticky expandovala a zemezilo se nutnosti volat Environment::expand().
Určitě se expanduje, nakonec její výchozí hodnota je
'%logDir%/php_error.txt'
. Tomu vždy rozumím tak, že ti výchozí
adresář nevyhovuje?
Ondřej Mirtes napsal(a):
Když už jsme u těch proměnných prostředí, neustále oplakávám
templatesDir
, protože tuším, že vždy obsahovala správnou cestu do složky se šablonami, a to i v nové modulové struktuře.
To bys ji přeceňoval. Stačí dát do config.ini
variable.templatesDir = %appDir%/templates
a je to to stejné.
vrtak-cz napsal(a):
EDIT: z diskuse to vypadá že
setMode()
asetName()
je něco podobného jaký je mezi nima rozdíl?
Celkem zásadní, což se záhy změní ;)
- BigCharlie
- Člen | 283
- nastavujete někdy druhý parametr (cesta k logu)?
Ne
- nastavujete někdy třetí parametr skrze pole?
Ano
třída Environment:
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu?
Ne
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
Ne
- využíváte nějak
setName()
?
Ne
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
Zatím jsem se tomu vyhnul
- využíváte proměnné prostředí a jak?
Ano
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Ne
- Honza Marek
- Člen | 1664
David Grudl napsal(a):
Honza Marek napsal(a):
Ano, pokud by se to udělalo samo (udělá?), nepotřeboval bych.Můžeš to prosím rozvést?
Tady šlo jen o to, že jsem myslel, že v případě nezadání toho parametru (nebo zadání null) se logování do souboru vypne. Nevěděl jsem o tom, že se tam sama dosadí výchozí hodnota.
- Jan Tvrdík
- Nette guru | 2595
- nastavujete někdy druhý parametr (cesta k logu)?
Ne
- nastavujete někdy třetí parametr skrze pole?
Ano, vždy.
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu?
Ne.
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
Ne, ale pro logDir
si dovedu představit rozumné využití.
- využíváte nějak
setName()
?
Ano.
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
Nejsem si jist, zda to dobře chápu, ale pokud jde o to, že na projektu
pracuje více vývojářů a každý z nich potřebuje vlastí konfiguraci
(jiné přihlašovací údaje k DB), tak jsem to řešil zatím 2×. Vždy si
vývojář vytvořil soubor s předem daným názvem (třeba developer.ini /
devoloper.php), který byl nastaven ve verzovacím systému v ignore a buď
přímo definoval konfiguraci (ini varianta) nebo stanovoval název prostředí
v config.ini (třeba [HonzaTvrdik]
).
- využíváte proměnné prostředí a jak?
Ano, např. jako cesty k jednolitým složkám
(imagesDir
, …).
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Více prostředí ano, viz (6). Žádný speciální mód jsem nikdy nepoužil.
Editoval Jan Tvrdík (12. 4. 2010 17:27)
- Jan Tvrdík
- Nette guru | 2595
vrtak-cz napsal(a):
z diskuse to vypadá že
setMode()
asetName()
je něco podobného jaký je mezi nima rozdíl?
name = název mašiny, např. můj hlavní komp, můj notebook, Pepův komp, hosting, … – každý má jiné přihlašovací údaje k DB, jiný operační systém, jinak namapované systémové složky, jinde document root; je to prostě jiné prostředí (má jiný název).
mode = obvykle laděnka on/off – na každé počítači (tj. prostředí) můžu spustit aplikaci v různých módech. Typicky se zapnutou laděnkou (development) nebo se zapnutým error presenterem (production).
Editoval Jan Tvrdík (12. 4. 2010 17:34)
- Honza Kuchař
- Člen | 1662
David Grudl napsal(a):
Debug::enable()
- nastavujete někdy druhý parametr (cesta k logu)?
Ne (automaticky se tam nastaví)
- nastavujete někdy třetí parametr skrze pole?
Ne Ale používám místo toho vlastní hnadler na odeslání mailu. (nevěděl jsem o tom)
třída Environment:
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu?
Ne
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
encoding – ano, všude mám UTF-8
lang – ne, nedělám multijazyčné systémy
logDir – to se bere nějak automaticky laděnka; Já sám to nikde
nepoužívám
- využíváte nějak
setName()
?
Režim prostředí, jestli jsem na produkci, vývojovém notebooku nebo na pevném PC. :)
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
udělám sekcí víc. :)
- využíváte proměnné prostředí a jak?
ne
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
viz 5)
Díky!
Není za co!
- marek.dusek
- Člen | 99
- nastavujete někdy druhý parametr (cesta k logu)?
Ne.
- nastavujete někdy třetí parametr skrze pole?
Ne.
- používáte
setMode() / getMode()
jinak, než na nastavení/zjištění production režimu?
Dříve jsme z bootstrapu čarovali se setMode() a setName() dle IP adres, ale nakonec máme produkční mód natvrdo vypnutý v devel SVN branchi a naopak zapnutý v production, protože to ve finále byl bordel s WTF faktorem + máme ho vždy forcnutý pro CLI, protože HTML výstup Laděnky nebyl košer ;)
- využíváte v aplikaci předdefinované proměnné
encoding, lang, logDir
?
logdir ano, jinak neznám.
- využíváte nějak
setName()
?
Viz 3. V produkci máme natvrdo prostě ‚production‘, v develu/testu má každá instance v bootstrapu detekci ‚development‘, ‚test‘, … jejich odlišnosti jsou ale spíš minoritní (třeba identifikační string do mailu, který by klidně zastoupil hostname atp)
Nicméně je ale imho logika okolo přepínámí/detekce produkce chybná – neumím si představit scénář, kdy budu mít společnou větev pro vývoj, testování, produkci, drc … už jen kvůli živým heslům, která se ve vývoji nesmí objevit. Automaticky tedy udržuju vždy více konfiguračních souborů, tj. minimálně setName() je imho uplně na houby a používáme to spíš proto, „že to tam je“ a snažíme pro něj najít využití ;) Navíc autodetekce = dotazy na ip adresu/hostname, což může být (a asi je) typicky levné, ale je to prostě další overhead – zbytečný.
U jiných, ne-nette aplikací má prostě každá instance (i v rámce vývoje, tj. test a nějaké lokální devy) „svůj“ konfigurák, kde si nastavíme logování, hesla atp., přičemž v SVN máme nějaký „defaultní“ a lokálně ho dle potřeb upravujeme + mergujeme nové featury.
Dal bych tedy možnost nasetování setProduction(true/false) s true jako default (pesimistický přístup ⇒ žádná autodetekce; ikdyž už vidím ty zástupy lidí, jak se diví, že na localhostu vidí bílo…) a setName() vyhodil, protože je prostě k ničemu ;)
.. což vede k otázce, k čemu tam ten mód vlastně je, když řídí pouze chování laděnky a možná profileru ;)
- jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
Nerozumím uplně otázce, ale běžně sdílíme config pro výše uvedené prostředí, ale ustoupíme z toho, tj. stačila by jedna ‚common‘ ;)
- využíváte proměnné prostředí a jak?
Jakože %wwwDir% v configu pro další cesty k nějakým zdrojům atp.? Ano.
- využíváte více prostředí nebo více módu? (tj. například nějaký „performance“ režim)?
Nerozumím uplně otázce – jestli to znamená více různých setName(), tak viz 5, jinak ne ;)
Díky!