Rails ile geliştiridiğim projelerimi genelde heroku üzerinde tutuyorum. Bu yazımda da bir projede kullandığım Scheduler
‘i anlatacağım.
Scheduler (Zamanlayıcı)
Heroku üzerindeki projelerimizde cron
yerine kullanabilecegimiz, cron
‘dan daha gelişmiş add-on. Mesela sisteminizdeki kullanıcıları günlük olarak gelişmelereden haberdar etmek istiyoruz. Hergün uygulamaya girip kendimiz mail gönderme fonksiyonunu çalıştırmayacağız herhalde :). İşte Scheduler
burada devreye girip bizim yerimize istediğimiz zamanlarda mail gönderme fonksiyonunu çalıştırıyor.
Scheduler günlük, saatlik veya 10 dakikalık zaman dilimlerinde görev tanımlama imkanı sunuyor. Şimdilik bunların hepsi ücretsiz :)
Uygulamamıza Scheduler
eklemek için
https://addons.heroku.com/scheduler sayfasındaki add butonuna tıklayarak yada,
- Terminalden aşağıdaki komutu yazarak
1
|
|
ekleme yapıyoruz.
Daha sonra lib/rake
klasörü altına scheduler.rake
isminde bir dosya oluşturup içine şu kodları ekliyoruz.
1 2 3 4 5 6 7 8 9 10 |
|
Yukarıdaki kodu açıklayacak olursak; Burada :update_feed
görev ismi. puts "Updating feed..."
ile log’ a Updating feed… yazıyor. Sonra NewsFeed
classının update
metodunu çalıştırıyor. Son satırda ise log’ a done. yazıyor. Diğer görevde aynı mantıkla çalışıyor. Buradaki NewsFeed ve User class’ ları NewsFeed ve User modelimizin class’ ları.
Evet şimdi görevleri yazdık, Heroku’ da tanımlama zamanı. Uygulamamızın General Info sayfasına gidiyoruz ve sağ üstteki drop down şeklindeki add-ons menüsüne tıklayarak uygulamamıza eklemiş olduğumuz add-on ları görüyoruz. Buradan Scheduler’ i seçip scheduler dashboard’ a ulaşıyoruz. Add job diyerek yeni bir görev tanımlıyoruz. Görev isminin başına rake komutunu eklemeyi unutmayalım. Çünkü rails’ de görevleri rake komutu ile çalıştırıyoruz.
Burada tanımladığımız görevlerin zaman dilimi yukarıda da bahsettiğim gibi saatlik, günlük veya 10 dakikalık. Peki kendimiz bir zaman dilimi belirleyemez miyiz?. Ben bir görevi haftalık çalıştırmak istedğimde şöyle bir yola başvurdum;
Heroku üzerinde görev zaman dilimini günlük olarak ayarlıyıp, görev koduna da günü kontrol eden if bloğu ekleyerek haftanın istedğim gününde görevi çalıştırıyorum.
1 2 3 4 5 6 |
|
Burada Time.now.saturday?
kodu true false döndürüyor. Görev de sadece cumartesi günleri çalışıyor. Time.now.saturday?
yerine Date.today.wday == 6
de kullanabiliriz.
Komut satırına heroku logs --ps run
yazarak görev log’ ları görebiliriz.
Kolaylıklar…