Template warmup cache cez cli

- miskovicm
 - Člen | 3
 
Ahojte,
potreboval by som sa poradiť ako máte naimplementovaný warmup pre latte
šablóny.
Používam Latte\Engine::warmupCache, čo funguje korektne, až na
cache key.
v CLI nie sú namapované presenter funkcie isLinkCurrent &
isModuleCurrent, ktoré sa používajú na generovanie cache key.
Čiže takto skompilované šablóny sa nikdy nepoužijú.
Ak ten istý script spustím cez presenter a HTTP volanie, tak to zafunguje, ale zdá sa, že iba ak mám vypnutý debug mode.
public function actionWarmup(): void {
    $latte = $this->template->getLatte();
    foreach (\Nette\Utils\Finder::findFiles('*.latte')->from(...) as $file) {
        $latte->warmupCache($file->getRealPath());
    }
    $this->terminate();
}
Prinajmenšom ma len nasmerujte, či to riešim správnym spôsobom.
Ďakujem krásne.

- uestla
 - Backer | 799
 
Ahoj, to bude tím, že v CLI neexistuje HTTP request – viz https://phpfashion.com/…lech-a-nette.
Možná se zkus podívat na https://github.com/…onsole-extra, který command pro warmup obsahuje + má závislost na https://github.com/…utte/console, ve které si můžeš nakonfigurovat URL pro umělý HTTP request právě v rámci CLI commandu.

- miskovicm
 - Člen | 3
 
Dopracoval som sa k nasledovnej úprave Latte\Engine
Ak odstránim presenter metódy, tak to funguje aj cez CLI.
protected function getCacheKey(): array
{
    $funcs = $this->getFunctions();
    unset($funcs['isLinkCurrent'], $funcs['isModuleCurrent']);
    return [
        $this->contentType,
        array_keys($funcs),
        array_map(
            fn($extension) => [
                get_debug_type($extension),
                $extension->getCacheKey($this),
                filemtime((new \ReflectionObject($extension))->getFileName()),
            ],
            $this->extensions,
        ),
    ];
}
Z toho mi vychádza, že k tomu pristupujem inak, ako bolo zamýšľané
alebo generovanie kľúča s tým nepočíta.
Príde mi kontraproduktívne umelo vyrábať v CLI presenter (ak sa to vôbec
dá), aby som ho mohol posunúť do TemplateFactory.
Editoval miskovicm (7. 10. 2024 22:40)

- miskovicm
 - Člen | 3
 
uestla napsal(a):
Ahoj, to bude tím, že v CLI neexistuje HTTP request – viz https://phpfashion.com/…lech-a-nette.
Možná se zkus podívat na https://github.com/…onsole-extra, který command pro warmup obsahuje + má závislost na https://github.com/…utte/console, ve které si můžeš nakonfigurovat URL pro umělý HTTP request právě v rámci CLI commandu.
Konecne som mal chvilu cas, tak som si spravil novy projekt
nette/application + contributte/console-extra a
nefunguje to rovnako ako som popisal. Aktualne to asi nie je mozne, kedze web a
cli pouzivaju odlisnu konfiguraciu.