Jak na Laravel frontu na sdíleném hostingu

18.9.2018 (aktualizováno 8.10.2018) Pavel Tipy & triky, PHP

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

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.

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?

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

Přidat komentář

Právě odpovídáte na existující komentář. Zrušit

Komentáře

Novinky z blogu

Přidání balíčku do Composeru bez Packagist

Composer umožňuje přidat balíček, který není zveřejněn na Packagist. Stačí, aby byl ve veřejném či privátním git repozitáři, dostupný lokálně na serveru v jiné složce nebo...

Další články