Tento článek patří do seriálu Laravel + Artisan a webhosting. Ostatní články seriálu:
- Laravel na sdíleném hostingu Wedos i OneBit
- Jak na Laravel frontu na sdíleném hostingu
Laravel obsahuje úžasnou funkcionalitu a tou je fronta neboli Queue. Bohužel na sdíleném hostingu nelze spustit Supervisora nebo daemona pro sledování fronty. Na záchranu přichází balíček, který dovolí spouštět úkoly ve frontě a poté skončit.
16.01 vyšla aktualizace balíčku, která opravuje chybu neznámého přepínače v některých situacích. Více v Issues
Sans daemon
Balíček SansDaemon je přesně to, co je potřeba přidat do projektu, aby bylo možné frontu spouštět bez supervisora nebo daemona. Po nainstalování bude základní artisan příkaz queue:work nahrazen novým, který obsahuje nové přepínače.
composer require queueworker/sansdaemon
Prvním je --sansdaemon, který okamžitě zpracuje všechny úkoly ve frontě. To lze navíc omezit pomocí přepínače --jobs=X, kde lze specifikovat kolik úkolů se má provést. Po dokončení je příkaz ukončen, což je přesně to, co je na hostingu potřeba.
Omezení doby běhu
Do knihovny jsem pomocí pull requestu ještě přidal možnost --max_exec_time=X. Lze tím omezit vykonávaní fronty na X sekund tak, aby nedošlo k chybě Maximum execution time of XX seconds exceeded. Pokud čas bude překročen, další úkol ve frontě se nespustí. Proto je potřeba volit tento čas o něco menší, než je maximální dovolený čas. Jako výchozí hodnotu proto obsahuje čas o 5s kratší, než je maximální možná doba běhu skriptu.
Tato funkce nezabrání zmíněné chybě při velmi dlouhém běhu úkolu! Pouze se ji pokouší předcházet. Pokud jsou vaše úkoly časově náročné, omezte je kratším časem. Případně lze využívat více front se jmény a přepínačem --queue
Spuštění
Pokud je alespoň omezený přístup k příkazové řádce, je to jednodušší. Stačí spustit
php artisan queue:work --sansdaemon
V opačném případě lze využít ArtisanControlleru z předchozího článku a přidat další metodu s ošetřením proti ukončenému spojení.
public function queueWork() { // Uživatel zavře prohlížeč nebo spojení je ukončeno // PHP skript poběží i nadále ignore_user_abort(true); return $this->callArtisan('queue:work', [ '--sansdaemon' => true ]); }
Hádanka: Najdi logo
V úvodním obrázku jsou zakomponovány celkem 3 loga Laravelu. Najdete je, nebo jste si všimli hned?
Máte další zkušenosti s Laravelem na sdíleném hostingu? Podělte se v komentářích
K tomuto článku již není možné přidávat další komentáře