Cache – refresh Nette.Configurator
- Pavel Kravčík
- Člen | 1180
Mám menší nástavbu nad neonem, kdy pomocí jednoduchého zápasu neonu umí nějaký SettingManager vygenerovat formulář, kde se zadají věci typu „povolit cron“, „produkční režim“ apod. To se pak uloží do automaticky generovaného neonu a z něj se berou data pro zbytek aplikace.
Na produkční bych chtěl po uložení formuláře refreshnout Nette.Configurator, aby se to nemuselo dělat ručně nebo to hledat přes Finder. Zkoušel jsem něco podobného, ale buď jsem netrefil $cacheKey nebo to špatně chápu.
Díky za popostrčení.
$storage = new \Nette\Caching\Storages\FileStorage('tempDir'); //tempDir vytažené přes DI
$cache = new \Nette\Caching\Cache($storage);
$cache->clean(['Nette.Configurator']); //zkoušel jsem i clean() apod.
- Pavel Kravčík
- Člen | 1180
Stejně bych tam musel řešit smazání cache, ne? :) Pochybuju, že se ten soubor před loadFile doplní do cache.
- Pavel Kravčík
- Člen | 1180
Vyřešil jsem Finderem a unlinkem. To spoustí přegenerování automaticky a nemusím šahat do Loaderu, který se může v příští verzi rozbít.
Teoreticky by to mělo jít přes tu cache, což by měl být nejčistější způsob za mě, ale koukal jsem na nějaké staré issues a pravděpodobně jsou stále „neopravené“.
- Pavel Kravčík
- Člen | 1180
@CZechBoY: Jasně, předpokládal jsme, že se tam dává klíč, který se pak následně hashuje. Logicky bych tam jako klíč dal název Class či Namespace (nebo složku).
Každopádně díky, jen jsem hledal hezčí řešení. :)
- CZechBoY
- Člen | 3608
No on stejně ten loadFile je k něčemu jinýmu než jsem si myslel :-)
Zkusil bych si podědit Configurator a přepsat metodu createContainer, aby
vždy rebuildoval DIC.
Potom zvenku bude ta rekompilace relativně jednoduchá
$configurator = new AlwaysRebuildConfigurator();
$configurator->addConfig(...);
$configurator->createContainer();
- Pavel Kravčík
- Člen | 1180
No tohle právě nechci. To by se dělo pokaždé a to je zbytečné. Stačí mi to je ve chvíli, když dojde k uložení automaticky generovaného formuláře. To se děje cca jednou za půl roku. Například se nastaví, že API je dočasně nedostupné při migraci.
Díky, chápu kam tím míříš.