whenever使用方法

            Whenever是一個使用crontab的方式來做排程工作的gem,crontab 是一個linux內建的排程工具,詳細介紹可參考這裡crontab並不是目前最理想的排程方式,詳情可參考這裡。如果覺得whenever不合用的話,在rails還是有很多其他的gem可以選用,像是rufus-schedulerClockwork ...等,可依照自己需求做選擇。


安裝
  1. 先在server或開發環境上安裝 whenever,直接於command line輸入以下指令:

    gem 'whenever', :require => false
    
  2. 再來就要思考要使用哪種方式執行工作,whenever 預設支援下列幾種方式,差別可看官方文件job types部份

    1. rake
    2. runner
    3. command
    4. script
    5. 當然您喜歡的話,也可以自己定義一種方式
  3. 這裡我選擇以 rake 的方式執行。所以在 lib/tasks 裡新增一個rake檔案,這裡我使用的檔名為jobs.rake

    lib/tasks/jobs.rake
    # encoding: utf-8
    
    namespace :[namespace] do
        desc "這是一個rake" #此處可自行輸入task的描述
    
                task :[your task name] => :environment do
                        [your code here]
                end
        end
    end
    
  4. 接下來可以測試一下是否可正常執行,可以在command line輸入以下指令做測試:

    rake -T #會列出剛新增的rake
    bundle exec rake [namespace]:[task] #執行rake
    
  5. rake做完後,就要新增排程了,先產生必要的檔案,在專案目錄下以command line輸入以下指令:

    wheneverize .
    

    執行完後,會產生 config/schedule.rb 這個檔案,排程的設定可以設定在此。

  6. 編輯 config/schedule.rb 來設定排程:

    config/schedule.rb
    env :PATH, ENV['PATH'] #要用bundle時必須要加
    
    set :output, 'log/cron.log' #設定log的路徑
    
    every 1.day, :at => '1:00 am' do
        rake "[剛剛的namespace名稱]:[剛剛的task名稱]"
    end
    
  7. 在command line輸入以下指令來檢查排程設定是不是都正確:

    whenever
    

    此命令會以 crontab 的方式將你設定的排程指令顯示出來,如下:

    0 1 * * * /bin/bash -l -c 'cd [/path/to] && RAILS_ENV=production bundle exec rake [namespace]:[task] --silent >> log/cron.log 2>&1'
    

    其中 crontab 的說明可在command line下 man 5 crontab來看說明文件,格式大致上為: 分 時 日 月 星期 命令 ,* 代表全部,以上面的 0 1 * * * 來說,就是每天的1:00都要執行。

  8. 如果有使用capistrano的話,可以在config/deploy.rb 加入下面程式:

    config/deploy.rb
    set :whenever_command, "bundle exec whenever" #要用bundle時必須要加,否則就不用
    
    require "whenever/capistrano"
    

    這樣設定的話,deploy時就會自動執行 whenever --update-crontab 將排程設定至 crontab 中。
    這個設定僅適用於 Capistrano 版本2以下,3以上請參考 官方文件 Capistrano V3 Integration部份

疑難排解
  1. 若排程沒有正常執行,可以去開啟 config/schedule.rb 中 :output 設定的log檔位置,此案例中為log/cron.log,檢查是否有錯誤訊息。
  2. 若錯誤訊息為 bundle command not found 請在 config/schedule.rb 中加入 env :PATH, ENV['PATH']

转自:http://lemonup.logdown.com/posts/169422-rails-whenever-use-note



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值