diff --git a/lib/tasks/posts.rake b/lib/tasks/posts.rake
index 506201211f3..5bcdf2983e8 100644
--- a/lib/tasks/posts.rake
+++ b/lib/tasks/posts.rake
@@ -8,6 +8,11 @@ task 'posts:rebake' => :environment do
 end
 
 task 'posts:rebake_uncooked_posts' => :environment do
+  # rebaking uncooked posts can very quickly saturate sidekiq
+  # this provides an insurance policy so you can safely run and stop
+  # this rake task without worrying about your sidekiq imploding
+  Jobs.run_immediately!
+
   ENV['RAILS_DB'] ? rebake_uncooked_posts : rebake_uncooked_posts_all_sites
 end
 
@@ -24,8 +29,18 @@ def rebake_uncooked_posts
   rebaked = 0
   total = uncooked.count
 
-  uncooked.find_each do |post|
-    rebake_post(post)
+  ids = uncooked.pluck(:id)
+  # work randomly so you can run this job from lots of consoles if needed
+  ids.shuffle!
+
+  ids.each do |id|
+    # may have been cooked in interim
+    post = uncooked.where(id: id).first
+
+    if post
+      rebake_post(post)
+    end
+
     print_status(rebaked += 1, total)
   end