我正在开发一个Rails应用程序,其中有很多文章。 每篇文章都可以发表 - 一篇文章的作者可以选择他想要发表文章的一小时以及(00,10,20,30,40,50)时的分钟。
让我担心的是什么 - 如何在这里设置CRON?我发布了带有延迟作业 gem的文章。我知道我可以将CRON设置为每10分钟运行一次,但是假设有10篇文章应该在 11:20 PM发布 - 可以 - 或者CRON流程会全部发布这10篇文章是否会有延迟工作
发表的文章因为处理这些任务只需要10分钟(因为CRON将在每隔00,10,20,30,40和50分钟运行一次) - 是否足够时间?
答案 0 :(得分:0)
使用Delayed :: Job的run_at选项,不需要cron
使用指定的publish_at日期时间
更新/创建文章时将作业排入队列job = PublishArticleJob.new(article.id)
Delayed::Job.enqueue(job, run_at: article.publish_at)
请注意您如何处理时区,如果我将文章发布为“太平洋”时间用户,我可能希望我的文章当时在“太平洋”中发布?
如果用户可以在运行之前更新publish_at时间,则需要删除现有作业或更新run_at,有关如何执行此操作的详细信息,请参阅How to cancel scheduled job with delayed_job in Rails?
以上假设你的工作看起来像
class PublishArticleJob < Struct.new(article_id)
def perform
article = Article.find(article_id)
# code to do the publishing
end
end