konfigurace RobotLoaderu v config.ini
- BigCharlie
- Člen | 283
Narazil jsem na problém s konfigurací Robotloaderu (rev. 7c147b1). Vycházel jsem ze změn popsaných Davidem.
Pokud v config.ini zadám tohle:
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.option.directory[] = "cesta/nekam"
service.Nette-Loaders-RobotLoader.run = TRUE
, tak se vůbec nic nestane. I když bych očekával, že jsem právě přidal další adresář pro skenování RobotLoaderem.
Druhý pokus:
service.RobotLoader.factory = Nette\Configurator::createRobotLoader
service.RobotLoader.option.directory[] = %appDir%
service.RobotLoader.option.directory[] = %libsDir%
service.RobotLoader.option.directory[] = "cesta/nekam"
service.RobotLoader.run = TRUE
funguje podle očekávání. Není to tedy BUG?
A ještě jeden poznatek, pokud přidám adresář pro skenování, NESMÍM vynechat výchozí adresáře. Nestálo by za úvahu změnit chování tak, aby se tyto dva adresáře skenovaly vždy (tj. appDir a libsDir)?
- BigCharlie
- Člen | 283
A ještě jedna drobnost – pokud je potřeba přidat napřiklad potřebný adresář pouze v jiné sekci (jako třeba v development), musí se zopakovat vše, není možné vytrhnout z kontextu pouze konkrétní řádek. Tedy tohle
[common]
service.RobotLoader.factory = Nette\Configurator::createRobotLoader
service.RobotLoader.option.directory[] = %appDir%
service.RobotLoader.option.directory[] = %libsDir%
service.RobotLoader.run = TRUE
[production < common]
service.RobotLoader.option.directory[] = "cesta/nekam"
fungovat nebude. Nebo dělám někde chybu?
- BigCharlie
- Člen | 283
redhead napsal(a):
Úplně nerozumím, na co odkaz upozorňuje? Pokud na to, že Pandovi to
v odkazovaném příspěvku nefungovalo, nemohu potvrdit, mně verze s
service.RobotLoader. atd
fungovala bez problémů (možná problém
s číslem revize).
Spíš mě zaráží, že nefunguje zápis s
service.Nette-Loaders-RobotLoader. atd
, převzatý z příkladů
v distribuci (konkrétně z CD-collection). Abych byl zcela přesný,
nefunguje přidání dalšího adresáře pro scanování RoborLoaderem, viz
první příspěvek.
- Honza Kuchař
- Člen | 1662
V příkladu uvedená továrnička
Nette\Configurator::createRobotLoader
skutečně existuje. Její implementace nevyžaduje seznam indexovaných adresářů – pokud je vynecháme, použije se výchozí hodnota, což jsou právě cesty%appDir%
a%libsDir%
. Tudíž oba řádkyservice.RobotLoader.option.directory
můžeme v tomto případě vynechat. Dokonce tato továrna je už předdefinovaná pod službouNette\Loaders\RobotLoader
– tedy vlastně stačí udělat jediné – službu nastartovat:[common] service.Nette-Loaders-RobotLoader.run = TRUE
- BigCharlie
- Člen | 283
Honzo, jsi strašně rychlej, než jsem stačil dočíst tvůj první post a zareagovat, už jsi ho stihnul smazat/opravit :-)
O tom, co píšeš, se asi nikdo nepře, viz můj první post. Zkus ale vyzkoušet konfiguraci z prvního postu, tj. do konfigurace přidat řádek
service.Nette-Loaders-RobotLoader.option.directory[] = "cesta/nekam"
, odkud bys chtěl načítat knihovny mimo adresáře appDir a libsDir (ponechme nyní stranou důvody proč). Tady jsem narazil na problém! Přídání adresáře do konfigurace RobotLoaderu neproběhne.
Editoval BigCharlie (18. 10. 2009 17:14)
- Honza Kuchař
- Člen | 1662
Teď teda nemám moc čas to zkoušet, ale netváří se mi to, že by se to chovalo divně. Zadáváš tam tu cestu absolutně?
- Honza Kuchař
- Člen | 1662
Máš recht, fakt to nejde. Asi je to bug.
Editoval honzakuchar (18. 10. 2009 17:24)
- BigCharlie
- Člen | 283
Pokud jsem to správně pochopil (debug step by step :-), jinak jsem byl ztracen), pokud není v config.ini uvedena factory pro službu, jsou nyní veškeré uvedené možnosti option ignorovány, protože se neuplatní tato podmínka. Pokud se tedy služba spouští při startu (což pro RobotLoader obvykle platí), záleží na implicitní konfiguraci.
Takže Davidův popis platí beze zbytku s jedním dodatkem. Implementace
továrničky Nette\Configurator::createRobotLoader
nepotřebuje
seznam indexovaných adresářů. Pokud ho ale chci upravit (zadat jiné
adresáře, nebo některé přidat), musím nyní explicitně uvést
i továrničku. A skutečně, tohle funguje:
service.Nette-Loaders-RobotLoader.factory = Nette\Configurator::createRobotLoader
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.option.directory[] = "cesta/nekam"
service.Nette-Loaders-RobotLoader.run = TRUE
Otázkou je, zda je to ignorování option direktiv bez uvedení factory v pořádku. Minimálně by to mohlo být zavádějící a přimlouval bych se buď za změnu (neznám ale dopad ny zbytek frameworku), nebo významné upozornění v dokumentaci.
- Honza Kuchař
- Člen | 1662
přimlouval bych se buď za změnu
Já taky. Nebo to výrazné upozornění. (ale teď nevím, co jsem tak zkoušel /ale jen tak letmo/, tak mi to co píšeš taky nefungovalo. Ale pokud to funguje tobě, tak bude chybka u mě)
- BigCharlie
- Člen | 283
Tak zřejmě od verze 1.x výš by měl být problém vyřešen.
EDIT: právě jsem ověřil, že pro verzi 0.9.4 tento problém stále platí a je potřeba ho obejít uvedeným řešením.
Editoval BigCharlie (23. 6. 2010 23:13)