gpt4 book ai didi

ruby-on-rails - 作业调度程序 Rescue 中的循环在 setinterval 中运行

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:21 26 4
gpt4 key购买 nike

我有一个数据库,其中包含一些推文/文本,我想在设定的时间间隔(例如:每 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 作业等)?对于这个含糊不清的帖子,我深表歉意,但几天来我一直在努力解决这个问题,但一无所获。

最佳答案

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

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

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

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

关于ruby-on-rails - 作业调度程序 Rescue 中的循环在 setinterval 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43316698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com