for job in job schedueler Resque在设定的时间间隔内运行

时间:2017-04-10 06:59:19

标签: ruby-on-rails ruby twitter resque resque-scheduler

我有一个数据库,其中包含我想要在设定的时间间隔内发布到Twitter的一些推文/文本(例如:每60秒)。推文应该遍历for循环并在每个时间间隔发布一条推文。

我已经编写了一个方法,可以为一条推文执行此操作,然后休眠60秒。

class TweetsController < ApplicationController

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

这基本上是我想要实现的,但需要在后台异步。我已经尝试并成功安装了redis / resque,但未能实现工作和工作。我是rails的新手,之前从未设置过后台工作人员/工作。

我在resque实施中有一个Sender.rb作业

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作业等)? 对于这个有点模糊的帖子感到抱歉,但是我一直试图绕过这个问题几天而无处可去。

1 个答案:

答案 0 :(得分:0)

您正在寻找whenever宝石。这个gem为编写和部署cron作业提供了一种非常简单的语法。您可以在schedule.rb文件中写下类似的内容:

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

您可以在Redis中设置然后获取推文号码,并在发布推文后将其递增1,例如:

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