Jak na Laravel frontu na sdíleném hostingu

(publikováno 18.09.2018) PHP, Laravel, Tipy & triky

Laravel pro spouštění fronty vyžaduje supervisora nebo daemona, který ale na sdíleném hostingu spustit nelze. Přesto se dá i tato úžasná funkce používat na běžném hostingu.

Jak na Laravel frontu na sdíleném hostingu

Tento článek patří do seriálu Laravel + Artisan a webhosting. Ostatní články seriálu:

  1. Laravel na sdíleném hostingu Wedos i OneBit
  2. 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 ]);
}

Mmm.. 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