Cache – refresh Nette.Configurator

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pavel Kravčík
Člen | 1180
+
+1
-

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.
CZechBoY
Člen | 3608
+
0
-

A co si udělat novej ContainerLoader a načíst ten změněnej soubor přes loadFile?
Nebo jsem moc naivní že by to mohlo fungovat?

Editoval CZechBoY (7. 12. 2016 10:17)

Pavel Kravčík
Člen | 1180
+
0
-

Stejně bych tam musel řešit smazání cache, ne? :) Pochybuju, že se ten soubor před loadFile doplní do cache.

CZechBoY
Člen | 3608
+
0
-

No to nevim, ale podle zdrojáků si zkontroluje jestli je expirovanej – když dáš ještě autoRebuild na true tak by ho měl i přegenerovat.

Pavel Kravčík
Člen | 1180
+
0
-

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é“.

CZechBoY
Člen | 3608
+
0
-

@PavelKravčík Do metody clean máš dávat úplně něco jinýho než název složky, ten máš dát do konstruktoru. Ale Configurator stejně nepoužívá cache storage.

Pavel Kravčík
Člen | 1180
+
0
-

@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
+
0
-

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

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íříš.

CZechBoY
Člen | 3608
+
0
-

No však ten spešl Configurator bys vytvořil až po tý změně.