2011-04-14 68 views
0

如何從rake文件創建延遲作業。我應該如何將它移入控制器並創建一個每15分鐘運行一次任務的delayed_job。Rails幫助從rake文件創建delayed_job

下面是一個例子,如何我耙文件:

namespace :reklamer do 

    task :runall => [:iqmedier, :euroads, :mikkelsen] do 
     # This will run after all those tasks have run 
    end 

     task :iqmedier => :environment do 
       require 'Mechanize' 
       agent = WWW::Mechanize.new 
       agent.get("http://www.iqmedier.dk") 
     end 
     task :euroads => :environment do 
      require 'Mechanize' 
      require 'pp' 
      agent = Mechanize.new { |agent| 
     end 

     task :mikkelsen => :environment do 
      require 'Mechanize' 
      agent = Mechanize.new 
      agent.get("http://affilate.mikkelsenmedia.dk/partnersystem/mylogins.php") 
     end 
    end 

我應該怎麼改是一個延遲的工作(https://github.com/collectiveidea/delayed_job)?

+0

我的問題清楚了嗎? – 2011-04-14 11:56:31

+0

「延遲工作」是什麼意思?圖書館(https://github.com/tobi/delayed_job)或只是在後臺運行的東西? – Wukerplank 2011-04-14 13:40:50

+0

我的意思是https://github.com/collectiveidea/delayed_job而不是cron作業,因爲heroku每隔1小時只能運行cron作業 – 2011-04-14 13:48:51

回答

0

建議您查看SimpleWorker,這是一款適用於Ruby應用程序的基於雲的後臺處理/工作隊列。它專爲卸載任務,運行預定作業以及擴展以同時處理許多並行作業而設計。它很簡單,價格合理,可擴展。

(披露,我爲公司工作。)

你創建你的員工(在app /工人),然後在你的控制器和其他地方排隊起來馬上運行或調度以便日後或在只需幾行代碼即可重複使用。這是一個基本的例子。

 
    worker = ReportWorker.new 
    worker.user_id = @current_user.id 
    worker.schedule(:start_at => 1.hours.since, :run_every => 900) 

    #Or to run once right away 
    #worker.queue 

ReportWorker類將包含爲當前用戶創建報告併發送或發佈它所需的邏輯。

+0

適當的一個大型網站的一個很好的解決方案。但我只需要每15分鐘運行一個後臺任務 – 2011-04-22 19:07:03

0

DelayedJob本身並不會幫助你,因爲它基於一次性工作。你仍然需要定期運行的東西來創造這些工作。

假設:

  1. 你在Heroku上,只能獲得1小時的cron
  2. 你需要運行一個任務,每15分鐘

你可以做這樣的事情...

做一個類作業:

class MechanizeJob < Struct.new(:url) 
    def perform 
    agent = Mechanize.new 
    agent.get(url) 
    end 
end 

計劃從您的Rakefile的工作:

task :schedulejobs => :environment do 
    urls = ["http://...", "http://...", "http://..."] 
    urls.each do |url| 
    # 1 is the job priority 
    Delayed::Job.enqueue MechanizeJob.new(url), 1, Time.now 
    Delayed::Job.enqueue MechanizeJob.new(url), 1, 15.minutes.from_now 
    Delayed::Job.enqueue MechanizeJob.new(url), 1, 30.minutes.from_now 
    Delayed::Job.enqueue MechanizeJob.new(url), 1, 45.minutes.from_now 
    end 
end 

這將運行每個URL工作每隔15分鐘。

+0

班級進入哪個文件夾?你可以用這個代碼的例子http://stackoverflow.com/questions/5674880/rails-delayed-job-not-working – 2011-04-15 10:26:48