2017-04-10 80 views
2

我有一個數據庫,其中包含一些tweets /文本,我想要在一個設定的時間間隔(例如:每60秒)發佈到Twitter。推文應該遍歷一個for循環,並在每個時間間隔發佈一條推文。for循環在作業schedueler resque在設定的時間間隔運行

我已經寫了一個方法,可以爲一條推文做這個,然後睡60秒。

class TweetsController < ApplicationController 

    def create 
     Tweet.all.each do |t| 
      current_user.tweet(t.text) 
      sleep 60 
     end 
     end 
end 

這基本上是做我想達到的目標,但需要異步和在後臺。我已經嘗試併成功安裝了redis/resque,但未能實現工作並實施工作。我是新來的鐵桿,從來沒有建立過後臺工作/職位。

我有一個Sender.rb工作在resque實施

class Sender 
    def self.queue = :tweets_queue end 

     def self.perform user_id 
      Tweet.all.each do |t| 
       current_user.tweet(t.text) 
      end 
     end 

    end 

我已經根據所有作業將自動文件夾中的文件和自動加載執行resque。

但我目前遇到幾個問題。像這樣,for循環每次啓動worker都會運行(我從來沒有運行它)。我需要弄清楚工作人員每次作業開始時如何逐個遍歷數據庫條目。 另外我該如何安排要執行的作業(例如每60秒或每24小時運行一次Sender.rb作業等)? 對不起,這個模糊的帖子,但我一直試圖包圍我的頭幾天,並沒有取得任何進展。

回答

0

您正在尋找whenever寶石。這個gem爲編寫和部署cron作業提供了一個非常簡單的語法。您可以在schedule.rb文件像這樣寫:

every 1.minute do 
    runner "Sender.enqueue" 
end 

您可以設置,然後得到的Redis你的tweet數量和發佈鳴叫後增加它由1,如:

offset = redis.get('offset') 
Tweet.offset(offset - 1).first