Environment::setMode(), setName(), konfigurace a přepínání režimů

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

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()

  1. nastavujete někdy druhý parametr (cesta k logu)?
  2. nastavujete někdy třetí parametr skrze pole?

třída Environment:

  1. používáte setMode() / getMode() jinak, než na nastavení/zjištění production režimu?
  2. využíváte v aplikaci předdefinované proměnné encoding, lang, logDir?
  3. využíváte nějak setName()?
  4. jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
  5. využíváte proměnné prostředí a jak?
  6. 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
+
0
-

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()

  1. nastavujete někdy druhý parametr (cesta k logu)?

Ano, pokud by se to udělalo samo (udělá?), nepotřeboval bych.

  1. nastavujete někdy třetí parametr skrze pole?

Jako víc mailů? Ne. (To jde?)

třída Environment:

  1. 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.

  1. používáte setMode() / getMode() jinak, než na nastavení/zjištění production režimu 5) využíváte nějak setName()?

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.

  1. jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?
  2. 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í.

  1. 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
+
0
-

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.

  1. setMode() / getMode() – jen pro nastavení DEVELOPMENT/PRODUCTION. To se snad jinak ani nedá, ne? :)
  2. 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.
  3. 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.
  4. Nepotřeboval jsem.
  5. Akorát lang. Ale hodí se je mít, nic bych s nimi nedělal.
  6. 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
+
0
-

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()

  1. 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().

  1. nastavujete někdy třetí parametr skrze pole?

Ne.

třída Environment:

  1. 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í.

  1. 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

  1. využíváte nějak setName()?

Ne.

  1. jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?

Neřeším.

  1. 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

  1. 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
+
0
-

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.

Jod
Člen | 701
+
0
-

U wiki používam jednu app pre viac stránok. V konfigu to vyzerá potom tak, že každá stránka má svoju [sekciu].

_Martin_
Generous Backer | 679
+
0
-

Debug::enable()

  1. nastavujete někdy druhý parametr (cesta k logu)?

viz. 4)

třída Environment:

  1. 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.

  1. 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í.

  1. jak řešíte načítání složitějších konfigurací, u kterých nemusí jedna sekce stačit?

Jak je to myšleno?

  1. využíváte proměnné prostředí a jak?

Proměnnou appDir pro vlastní hledání šablon v presenterech (metody format...).

  1. 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.

pekelnik
Člen | 462
+
0
-

Snazší konfigurace různých prostředí pomocí IP adres by byla dobrá.

Majkl578
Moderator | 1364
+
0
-

1., 2. nepoužívám
3. jsem kdysi používal v prostředí, kde vyvíjelo více lidí, každý si tak v configu nastavil vlastní konfiguraci lokální databáze.
4. nepoužívám
5. viz 3.
6. vesměs tím setName()
7. Možná tak appDir
8. neznám

Ondřej Brejla
Člen | 746
+
0
-

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()

  1. nastavujete někdy druhý parametr (cesta k logu)?

Ano

  1. nastavujete někdy třetí parametr skrze pole?

Ne
>

třída Environment:

  1. používáte setMode() / getMode() jinak, než na nastavení/zjištění production režimu?

Ne

  1. využíváte v aplikaci předdefinované proměnné encoding, lang, logDir?

Ne

  1. využíváte nějak setName()?

Vůbec

  1. 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 :-)

  1. využíváte proměnné prostředí a jak?

Občas

  1. 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
+
0
-

Debug::enable()

  1. vystačím si s %logDir% v configu
  2. ne string → e-mail

třída Environment:

  1. použil jsem jednou. Jinak používám spíš Nette\Environment::isProduction()
  2. kromě lang ano
  3. co to je? to tam jako fakt je?
  4. trochu jsem nepochopil otázku možná protože to asi nepoužívám
  5. 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);
  6. 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 | 7823
+
0
-

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() a setName() je něco podobného jaký je mezi nima rozdíl?

Celkem zásadní, což se záhy změní ;)

BigCharlie
Člen | 279
+
0
-
  1. nastavujete někdy druhý parametr (cesta k logu)?

Ne

  1. nastavujete někdy třetí parametr skrze pole?

Ano

třída Environment:

  1. používáte setMode() / getMode() jinak, než na nastavení/zjištění production režimu?

Ne

  1. využíváte v aplikaci předdefinované proměnné encoding, lang, logDir?

Ne

  1. využíváte nějak setName()?

Ne

  1. 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

  1. využíváte proměnné prostředí a jak?

Ano

  1. 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
+
0
-

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
+
0
-
  1. nastavujete někdy druhý parametr (cesta k logu)?

Ne

  1. nastavujete někdy třetí parametr skrze pole?

Ano, vždy.

  1. používáte setMode() / getMode() jinak, než na nastavení/zjištění production režimu?

Ne.

  1. využíváte v aplikaci předdefinované proměnné encoding, lang, logDir?

Ne, ale pro logDir si dovedu představit rozumné využití.

  1. využíváte nějak setName()?

Ano.

  1. 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]).

  1. využíváte proměnné prostředí a jak?

Ano, např. jako cesty k jednolitým složkám (imagesDir, …).

  1. 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
+
0
-

vrtak-cz napsal(a):

z diskuse to vypadá že setMode() a setName() 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 | 1661
+
0
-

David Grudl napsal(a):

Debug::enable()

  1. nastavujete někdy druhý parametr (cesta k logu)?

Ne (automaticky se tam nastaví)

  1. 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:

  1. používáte setMode() / getMode() jinak, než na nastavení/zjištění production režimu?

Ne

  1. 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

  1. využíváte nějak setName()?

Režim prostředí, jestli jsem na produkci, vývojovém notebooku nebo na pevném PC. :)

  1. 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. :)

  1. využíváte proměnné prostředí a jak?

ne

  1. 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
+
0
-
  1. nastavujete někdy druhý parametr (cesta k logu)?

Ne.

  1. nastavujete někdy třetí parametr skrze pole?

Ne.

  1. 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 ;)

  1. využíváte v aplikaci předdefinované proměnné encoding, lang, logDir?

logdir ano, jinak neznám.

  1. 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 ;)

  1. 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‘ ;)

  1. 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.

  1. 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!