我有一个数据库,其中包含我想要在设定的时间间隔内发布到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作业等)? 对于这个有点模糊的帖子感到抱歉,但是我一直试图绕过这个问题几天而无处可去。
答案 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