【问题标题】:For loop in job schedueler Resque running in set interval作业调度程序中的 For 循环救援在 setinterval 中运行
【发布时间】:2017-09-05 02:46:08
【问题描述】:

我有一个数据库,其中包含一些我想以设定的时间间隔(例如:每 60 秒)发布到 Twitter 的推文/文本。推文应该遍历一个 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 循环(我从来没有让它运行)。我需要弄清楚每次工作开始时工作人员如何逐个遍历数据库条目。 另外,我如何安排要执行的作业(例如每 60 秒或每 24 小时运行 Sender.rb 作业等)? 抱歉,这个有点含糊的帖子,但我这几天一直在努力解决这个问题,但一无所获。

【问题讨论】:

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


    【解决方案1】:

    您正在寻找whenever 宝石。这个 gem 提供了一个非常简单的语法来编写和部署 cron 作业。您将能够在schedule.rb 文件中写入如下内容:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多