Template warmup cache cez cli

miskovicm
Člen | 3
+
0
-

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

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

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. 22:40)

miskovicm
Člen | 3
+
0
-

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.