Pianificazione delle attività in Laravel

In questo articolo, passeremo attraverso una delle interessanti funzionalità della pianificazione delle attività Web framework di Laravel. Nel corso di questo articolo, vedremo come Laravel ti consente di gestire le attività pianificate nella tua applicazione. Inoltre, finiremo anche per creare le nostre attività pianificate personalizzate a scopo dimostrativo.

Il framework Laravel consente di impostare attività pianificate in modo da non doverti preoccupare di configurarle a livello di sistema. Puoi liberarti di quella sintassi cron complessa durante l'impostazione delle attività programmate poiché Laravel ti consente di definirle in modo intuitivo.

Inizieremo l'articolo con il modo in cui sei abituato ad impostare i tradizionali lavori cron, e in seguito esploreremo il modo in cui Laravel è realizzato. Nella seconda metà dell'articolo, faremo un tentativo creando una serie di attività programmate personalizzate che dovrebbero fornire una visione pratica sull'argomento.

Impostazione tradizionale delle operazioni pianificate

Nello sviluppo quotidiano delle applicazioni, spesso si verificano situazioni che richiedono l'esecuzione periodica di determinati script o comandi. Se stai lavorando con il sistema * nix, probabilmente sai che i lavori di cron gestiscono questi comandi. D'altra parte, sono noti come attività programmate su sistemi basati su Windows.

Diamo una rapida occhiata a un semplice esempio del lavoro cron basato su * nix.

* / 5 * * * * /web/statistics.sh

Abbastanza semplice: gestisce il statistics.sh file ogni cinque minuti!

Anche se si tratta di un caso d'uso piuttosto semplice, spesso ti trovi in ​​una situazione che richiede l'implementazione di casi d'uso più complessi. D'altra parte, un sistema complesso richiede la definizione di più processi cron eseguiti a intervalli di tempo diversi.

Vediamo alcune attività che un'applicazione web complessa deve eseguire periodicamente nel back-end.

  • Ripulisci i dati non necessari dal back-end del database.
  • Aggiorna gli indici di memorizzazione nella cache front-end per tenerlo aggiornato.
  • Calcola le statistiche del sito.
  • Inviare emails.
  • Eseguire il backup di diversi elementi del sito.
  • Generare rapporti.
  • E altro ancora.

Quindi, come puoi vedere, ci sono un sacco di cose là fuori che aspettano di essere eseguite periodicamente e anche a intervalli di tempo diversi. Se sei un amministratore di sistema esperto, è una passeggiata per te definire i lavori cron per tutte queste attività, ma a volte noi, come sviluppatori, desideriamo che ci sia un modo più semplice.

Fortunatamente, Laravel è dotato di un built-in Pianificazione delle attività API che ti consente di definire attività pianificate come mai prima d'ora. E sì, la prossima sezione riguarda tutto: le basi della pianificazione delle attività di Laravel.

La via di Laravel

Nella sezione precedente, abbiamo analizzato il modo tradizionale di creare cron jobs. In questa sezione, esamineremo le specifiche di Laravel nel contesto dell'API di pianificazione delle attività.

Prima di procedere, la cosa importante da capire è che la funzione di pianificazione fornita da Laravel è simile a qualsiasi altra funzione e non verrà invocata automaticamente. Quindi, se stai pensando che non hai bisogno di fare nulla a livello di sistema, allora sei sfortunato, direi.

Infatti, la prima cosa che dovresti fare se desideri utilizzare il sistema di pianificazione di Laravel è impostare il cron job che viene eseguito ogni minuto e chiama il comando artisan mostrato nel seguente snippet.

* * * * * php / percorso-per-tuo-progetto / programma artigianale: esegui >> / dev / null 2> & 1

Il suddetto comando artisan chiama lo scheduler di Laravel e, a sua volta, esegue tutti i processi cron in sospeso definiti nell'applicazione.

Naturalmente, dobbiamo ancora vedere come definire le attività pianificate nella tua applicazione Laravel, e questa è la prossima cosa che ci immergeremo.

È il programma metodo del App \ Console \ Kernel classe che è necessario utilizzare se si desidera definire attività pianificate specifiche dell'applicazione.

Vai avanti e prendi il contenuto del app / Console / Kernel.php file.

di comando ( 'ispirare') -> oraria (); 

Come puoi vedere, il codice core fornisce di per sé un esempio utile. Nell'esempio sopra, Laravel esegue il ispirare comando artigianale ogni ora. Non pensi che la sintassi sia così intuitiva in primo luogo?

In effetti, ci sono un paio di modi diversi in cui Laravel ti permette di definire le attività di pianificazione:

  • Usa la chiusura / callable.
  • Chiama il comando artigiano.
  • Esegui il comando shell.

Inoltre, ci sono un sacco di frequenze di programmazione integrate tra cui scegliere:

  • ogni minuto / ogni cinque minuti
  • oraria / giornaliera / settimanale / trimestrale / annuale
  • in un momento specifico della giornata
  • e tanti altri

In realtà, direi che fornisce un set completo di routine in modo da non dover mai toccare la shell per creare i tuoi cron job personalizzati!

Sì, posso dire che sei desideroso di sapere come implementare le tue attività programmate personalizzate, ed è quello che ho promesso anche all'inizio dell'articolo.

Crea la tua prima attività pianificata in Laravel

Come discusso, ci sono diversi modi in cui Laravel ti permette di definire le attività pianificate. Analizziamo ciascuno per capire come funziona.

Il metodo di chiusura / callable

L'API di pianificazione fornisce il chiamata metodo che ti permette di eseguire un callable o una funzione di chiusura. Rivediamo il app / Console / Kernel.php file con il seguente codice.

call (function () $ posts = DB :: table ('posts') -> select ('user_id', DB :: raw ('count (*) as total_posts')) -> groupBy ('user_id') - > get (); foreach ($ post come $ post) DB :: table ('users_statistics') -> dove ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]);) -> everyThirtyMinutes (); 

Come puoi vedere, abbiamo passato la funzione di chiusura come primo argomento del chiamata metodo. Inoltre, abbiamo impostato la frequenza ogni 30 minuti, quindi eseguirà la funzione di chiusura ogni 30 minuti!

Nel nostro esempio, contiamo i messaggi totali per utente e aggiorniamo di conseguenza la tabella delle statistiche.

Il comando dell'artigiano

Oltre alle chiusure o callables, puoi anche programmare un comando artigianale che verrà eseguito a determinati intervalli. In effetti, questo dovrebbe essere l'approccio preferito rispetto alle chiusure in quanto fornisce allo stesso tempo una migliore organizzazione del codice e riusabilità.

Vai avanti e rivedi i contenuti del app / Console / Kernel.php file con il seguente.

di comando ( 'statistiche: user') -> everyThirtyMinutes ();  / ** * Registrare i comandi basati sulla chiusura per l'applicazione. * * @return void * / protected function commands () require base_path ('routes / console.php'); 

È il comando metodo che vorresti utilizzare se desideri programmare un comando artisan come mostrato nello snippet di codice precedente. È necessario passare la firma del comando artisan come primo argomento di comando metodo.

Naturalmente, è necessario definire anche il comando artigiano corrispondente app / Console / Comandi / UserStatistics.php.

selezionare ('user_id', DB :: raw ('count (*) as total_posts')) -> groupBy ('user_id') -> get (); // aggiorna la tabella delle statistiche foreach ($ post come $ post) DB :: table ('users_statistics') -> dove ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > total_posts]); 

Il comando Exec

Potremmo dire che i metodi che abbiamo discusso finora erano specifici dell'applicazione stessa di Laravel. Inoltre, Laravel consente anche di programmare i comandi della shell in modo da poter eseguire anche applicazioni esterne.

Esaminiamo un breve esempio che dimostra come eseguire un backup del database ogni giorno.

exec ("mysqldump -h $ host -u $ username -p $ password $ database") -> daily () -> sendOutputTo ('/ backups / daily_backup.sql'); 

È evidente dal codice che è necessario utilizzare il exec metodo dello scheduler e devi passare il comando che vorresti eseguire come primo argomento.

Oltre a questo, abbiamo anche usato il sendOutputTo metodo che consente di raccogliere l'output del comando. D'altra parte, c'è un metodo, emailOutputTo, che ti permette di inviare via email i contenuti in uscita!

E questo ci porta alla fine dell'articolo. In effetti, abbiamo appena scalfito la superficie dell'API di pianificazione di Laravel e ha molto da offrire nel suo gattino.

Conclusione

Oggi abbiamo analizzato l'API di pianificazione delle attività nel framework web di Laravel. È stato affascinante vedere quanto facilmente ti consente di gestire attività che devono essere eseguite periodicamente.

All'inizio dell'articolo, abbiamo discusso il modo tradizionale di impostare le attività pianificate, e in seguito abbiamo introdotto il modo di farlo Laravel. Nella seconda metà dell'articolo, abbiamo analizzato un paio di esempi pratici per dimostrare i concetti di pianificazione delle attività.

Spero che ti sia piaciuto l'articolo e dovresti sentirti più sicuro riguardo all'impostazione di attività pianificate in Laravel. Per quelli di voi che stanno appena iniziando con Laravel o stanno cercando di espandere le vostre conoscenze, il vostro sito o la vostra applicazione con estensioni, abbiamo una varietà di cose che potete studiare nel mercato Envato.

Se qualcosa ti viene in mente, iniziamo una conversazione utilizzando il feed di seguito!