2014-04-30 13 views
6

Questa è la prima volta che pianifico un'attività e non sono sicuro della migliore implementazione (o della corretta implementazione).Ruby on rails tasks scheduling

Il mio obiettivo: Ho un rubino su rails 4 installazione di app con twilio e distribuito su Heroku. Voglio che l'app mandi automaticamente un messaggio a tutti i miei utenti una volta alla settimana con un messaggio di testo personalizzato (che è scritto e creato dalle informazioni nel database).

Dalla ricerca sono giunto alle seguenti gemme: Whenever e Rufus-Scheduler.

Credo che entrambe queste gemme possano portare a termine il lavoro, ma dopo aver letto i documenti di Rufus: "si noti: rufus-scheduler non è un sostituto di cron" Sono rimasto bloccato cercando di capire se quello che voglio è davvero un cron job o un "Rufus-Scheduler".

Sono rimasto con le seguenti domande: Che cos'è un cron job e quando è il momento giusto per usarlo? Perché Rufus-Scheduler non è una sostituzione di cron e cosa fa diversamente? Quale dovrei usare?

risposta

1

Circa Cron:

Cron è il nome del programma che non le attività sui sistemi nix in programma. Quali attività pianificate sono in Windows, Cron fa qualcosa di simile per Linux a livello concettuale.Cron è uno degli strumenti più utili in sistemi operativi come Linux o UNIX. Il servizio cron (demone) viene eseguito in background e controlla costantemente il file/etc/crontab e/etc/cron./directory. Controlla anche la directory/var/spool/cron /.

Per Pianificazione delle attività su Heroku

buona notizia è che il Heroku c'è una cosa che si chiama pianificazione, che è un add-on per l'esecuzione di lavori sulla vostra applicazione a intervalli di tempo programmati, molto simile a cron in un tradizionale ambiente server. quindi non hai davvero bisogno di giocherellare/giocare con cron o gemme come quando vuoi. basta usare l'addon dello Scheduler su Heroku.

Per maggiori informazioni visita: https://devcenter.heroku.com/articles/scheduler

+0

Sì, il Heroku Scheduler sembra come una grande opzione, ero un po 'spento da quando ho continuato a leggere nei suoi documenti "Scheduler ha un problema noto per cui in programma i processi vengono saltati saltuariamente " – stecd

+0

Credo che questa sarebbe la risposta giusta se l'Utilità di pianificazione Heroku effettivamente consentiva di pianificare le attività una volta alla settimana anziché una volta al giorno. – stecd

+0

stecd: nulla ti impedisce di avere una pianificazione attivata ogni giorno ma che fa qualcosa solo di domenica. 'se giorno! = domenica poi non fare nulla e tornare '. – jmettraux

1

Un lavoro cron è un programma eseguito su un calendario automatizzata, utilizzando il software di cron.

Rufus-Scheduler è diverso da cron perché viene eseguito all'interno dei processi Ruby.

Per quello che stai descrivendo credo che andrebbe bene.

0

whenever consente di scrivere il codice ruby ​​che verrebbe trasformato in un file crontab, che è un file che specifica un insieme di comandi e una frequenza per ciascun comando. Questo file è utilizzato da cron.

rufus-scheduler è puro rubino, si scrive il rubino e posti di lavoro in esecuzione in Ruby, per esempio all'interno del vostro ciclo applicazione chiamante scheduler.join, o in un altro thread chiamando ruby your/rufus_scheduler_script.rb.

A mio parere fanno le stesse cose, con cron si sta usando un comando linux, ma non vedo altre differenze.

Ci sono other options too, nella mia esperienza ho avuto problemi con rufus-scheduler, e ogni volta (non trovavano classi nella mia app Rails, ma forse era solo una stranezza), dall'altra parte il meccanismo a orologeria funzionava per me.

2

rufus-scheduler non è una sostituzione cron

può essere ampliato a "rufus-scheduler non è mai stato scritto come un rimpiazzo per cron". Il messaggio più grande è "tu sei uno sviluppatore e come sviluppatore dovresti conoscere l'ambiente che erediti e gli strumenti con cui viene fornito. Dovresti sapere quando usarli, quando imitarli, quando sostituirli."

Rufus-scheduler comprende la sintassi "* * * * *" di Cron. Ciò ha portato alcune persone a dire che "rufus-scheduler cerca di essere un sostituto di Cron". Potrebbe essere meglio formulato come "alcune persone hanno abusato di rufus-scheduler invece di pensare (sapendo) che il vecchio fedele Cron sarebbe stato migliore in quella situazione".

Per diventare un buon sviluppatore, dovresti pensare seriamente ad alcune * abilità di sysadmin * nix, altrimenti ti sarà difficile collaborare. Può essere facile come "installare, eseguire e gestire una macchina Linux in una VirtualBox nel tuo sistema".

Una pianificazione di rufus-scheduler viene eseguita in un processo Ruby. In un mondo vanilla, uno esegue rufus-scheduler nello stesso processo Ruby che fornisce servizi di richiesta http (applicazione web Rails o Sinatra) e, oh, oops, le pianificazioni non vengono eseguite quando l'applicazione non viene eseguita.

Cron è un servizio fornito dal sistema operativo * nix. Altre applicazioni e servizi sul tuo host si basano su di esso. Cron legge il suo crontab e esegue la sceneggiatura indicata in esso ai tempi stabiliti. Grazie all'eccellente When, a Cron può essere richiesto di eseguire script nell'applicazione Rails.

Questo potrebbe interessare anche: https://devcenter.heroku.com/articles/clock-processes-ruby