2011-09-06 17 views
8

Desidero eseguire un task ogni minuto su Heroku per verificare se le condizioni sono soddisfatte per il timeout di determinate attività utente. Posso eseguire solo un cron job Heroku ogni ora, quindi qual è il modo migliore per impostare un'attività temporizzata come questa. Sto usando Rails 3.1 su Heroku.pianifica un lavoro ogni minuto Rails 3.1 su Heroku

risposta

7

È possibile utilizzare delayed_job con un processo di riavvio automatico con :run_at. Qualcosa di un po 'come questo:

class YourJob 
    def do_interesting_things 
     #... Do what needs to be done. 
     self.delay(:run_at => 1.minute.from_now).do_interesting_things 
    end 

    def self.start_me_up 
     new.do_interesting_things 
    end 
end 

E poi da qualche parte durante l'inizializzazione dell'applicazione:

YourJob.start_me_up 
+0

grazie - lo proverò oggi e se funziona accetterò la risposta :-) –

+0

Hai risolto questo problema? Ho bisogno di eseguire un rake task ogni 1 minuto e sto pensando che ci dovrebbe essere un modo per farlo funzionare da solo vs che richiede cron. Attualmente cron su heroku ha un massimo di ogni ora. – ylluminate

+0

@ylluminate: non l'ho mai sentito, ma dovrebbe funzionare, provalo e fammi sapere come va. –

8

A partire da oggi, è possibile la gemma di pianificazione, clockwork. Heroku supporta ufficialmente questo e puoi trovare la loro documentazione here.

+0

Fantastico grazie –

+3

Basta notare che [orologio] (https://devcenter.heroku.com/articles/clock-processes-ruby) richiede un banco di prova, quindi costerà lo stesso di qualsiasi altro tipo di dyno ($ 0,05 all'ora, fatturabile al secondo - circa ** $ 35/mese **). Coloro che * non * richiedono una programmazione "ogni minuto", ma stanno bene con * ogni 10 minuti *, * ogni ora * o * ogni giorno (in un momento specifico) *, quindi considerano [Heroku Scheduler] (https : //addons.heroku.com/scheduler), un componente aggiuntivo gratuito. – user664833

+1

Un'altra limitazione di clockwork è che può essere eseguito solo su un singolo banco di prova, quindi se si ha un lavoro più programmato di un singolo processo in grado di gestire, la soluzione 'delayed_job' funzionerà meglio. – Leopd