我正在使用gem“when when”处理邮件调度模型,其状态为:published_at,schedule和drafts。但问题是在给定的时间后,帖子没有将其状态从Schedule更改为Published_at。
#schedule.rb
every 1.minute do
rake 'scheduler'
end
#example.rake
task scheduler: :environment do
time = Time.zone.now
posts = Post.scheduled.where(published_at: (time))
posts.update_all(status: "Published")
end
答案 0 :(得分:1)
task scheduler: :environment do
Post.scheduled.publish_now!
end
你的模型中的post.rb添加以下行:
def self.publish_now!
where(published_at: Time.now).update_all(status: "Published")
end
我认为通过Time.now进行搜索太冒险了,因为它会在第二时间获得准确的时间,但是你的调度程序每隔1.分钟,所以你有可能因为60秒的间隙而错过Post。所以你最好这样查询:
def publish_now!
where("status != ? AND published_at <= now()", "Published").update_all(status: "Published")
end