2011-09-06 12 views
8

Bazı kullanıcı görevlerini zaman aşımına uğratmak için koşulların yerine getirilip getirilmediğini kontrol etmek için her dakika Heroku'da bir görev yürütmek istiyorum. Sadece bir saatte bir Heroku cron işi yapabilirim, bu yüzden böyle zamanlanmış bir görev kurmanın en iyi yolu nedir? Heroku Rails 3.1 kullanıyorum.Her dakikada bir iş planı zamanlama Heroku'daki Rails 3.1

cevap

7

:run_at ile kendi kendini yeniden başlatan bir iş ile delayed_job kullanabilirsiniz. çeşit Böyle bir şey: bir yere, sonra

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 

Ve uygulamanızın başlatma sırasında: Bugün itibariyle

YourJob.start_me_up 
+0

Teşekkür ederim - bugün bunu deneyeceğim ve eğer çalışıyorsa, cevabı kabul ediyorum :-) –

+0

Bu işe yaradı mı? Her 1 dakikada bir komisyon görevini çalıştırmaya ihtiyacım var ve kendisinin cron gerektirmesi için bir yol olması gerektiğini düşünüyorum. Şu anda heroku cron her saatte bir maks. – ylluminate

+0

@ylluminate: Daha önce hiç duymadım ama işe yaramalı, denemeli ve bana nasıl gideceğini bilmeme izin ver. –

8

yapabilirsiniz zamanlama mücevher, clockwork. Heroku resmen bunu destekliyor ve belgelerini here bulabilirsiniz.

+0

Fantastik teşekkürler –

+3

Sadece [clockwork] (https://devcenter.heroku.com/articles/clock-processes-ruby) bir dyno gerektirdiğine dikkat edin, bu nedenle dyno diğer tür (aynı zamanda saat başına 0.05 $), aynı maliyet ikinciye faturalandırılabilir - yaklaşık ** 35 TL/ay **). * "* Her dakika" için planlamayı gerektirmez, ancak * her 10 dakikada bir *, * her saat * veya * her gün (belirli bir zamanda) * ile bitenler, sonra [Heroku Zamanlayıcısı] 'nı (https : //addons.heroku.com/scheduler), ücretsiz bir eklenti. – user664833

+1

Saat işinin bir başka kısıtlaması, yalnızca tek bir dyno üzerinde çalışabilmesidir, bu yüzden tek bir işlemin halledilebileceğinden daha planlı çalışmanız varsa, 'delayed_job' çözümü daha iyi çalışır. – Leopd