ben

OMÜ , Bilgisayar Mühendisliği, 13'

7 Nisan 2016 Perşembe

cronjob

   Cronjob, zamanlanmış görevler için kullanılan bir araç, Bir örnek üzerinden çalışma mantığını anlayalım. Yapmaya çalıştiğimiz örnek her gece 23:55 de ilgili kişilere sistemin mail atması.

Cronjob için whenever gemini kullanıcaz:

gemfile:
gem 'whenever', :require => false

config altına schedule.rb dosyası oluşturalım

job_type :rbenv_runner, %Q{export PATH=/home/esryrlmz/.rbenv/shims:/home/esryrlmz/.rbenv/bin:$PATH; eval "$(rbenv init -)"; \ cd :path && bundle exec rails runner -e :environment ':task' :output }


#her gun gece 23:55 de  mail gönder
every :day, :at=> '11:55pm' do
   rbenv_runner "SendMail.send_information_email",:environment => 'development'
end


* projeyi yayınladığınızda :environment => 'production'
* Eğer haftanın cuma gunu saat gece 23:55 de olmasını isteseydik 
            every :friday, :at=> '11:55pm' 
* Eger her saat olmasını isteseydik
            every 1.hours


Model altina SendMail dosyasını oluşturalım

# encoding: utf-8
class SendMail

  def self.send_information_email
      InfoMailer.send_information_email().deliver_now
  end
end

Terminalden cron işlevini restart edelim:

$ sudo service cron restart 
$ whenever

ekrancıktımız:

cronjob listesine bakalım

$ crontab -l

bu ekran cıktısında yukarıdaki iş görünmüyorsa

$crontab -e ile karşımıza gelen sayfayı manuel olarak düzenleyebiliriz(yukarıdakı 55 23 ile başlayan blogu bu sayfada yazılı olması gerekli)


Şimdi mail atma kısmını düzenleyelim

mailers içerisine send_mail.rb dosyası oluşturalım ve aşağıdaki gibi düzenleyelim

 default template_path: 'mail/send'
default from: "aaaa@hotmail.com"
class SendMail < ActionMailer::Base
   def send_information_email
       @date = DateTime.now.strftime('%d.%m.%Y').to_s
       @sales=Sale.all

       mail(
        to: "esryrlmz@gmail.com"
        cc: "eyrlmz999@hotmail.com"
        subject: "[Satıs raporu]",
        content_type: "text/html",
      )
  end
 end


Mail için view oluşturalım

View/mail/send/send_information_email.html.slim

doctype html
html
  head
    meta content=("text/html; charset=UTF-8") http-equiv="Content-Type" /
  body
    .row
      .col-sm-12
          p=@date +" tarihli satış raporu aşağıdadır"
    .panel.panel-default
     .panel-body
        .row
            .col-md-12.col-sm-12
           table.table.table-hover border="solid black" padding= "5px"
               tr
                   th colspan="6"
                    center
                    | Müşteri
         tr
               th colspan="2"
                center
                | Ürünler
               th colspan="2"
                center
                | Ödeme Bilgileri
                        tr  
                                td
                        | Ürün Sayısı:
               td  =@sales.customer.count
               td
                 |    Ödeme Bilgisi
               td  = @sales.paid.count



Bu mail ekranına ne yazarsak o mail het gun 23:55 de eklenen mail adreslerine gider. Mail göndermeyle ilgili olarak şu yazıyada bakabiliriz
             

Hiç yorum yok: