Ik moest dus live gaan zonder te wachten tot de hele rebake klaar was. Na live te zijn gegaan, kon ik de rebake niet uitvoeren, omdat dit de server zou uitschakelen. Ik kon de rebake niet op de standaard wachtrij uitvoeren, omdat dit alle andere processen, zoals meldingen, zou vertragen.
Dus ik gebruikte dit script om alle rebake-taken in de ultralow priority sidekiq-wachtrij te plaatsen. Ik deel het hier voor het geval iemand anders het nodig heeft.
# slow_rebake_resumer_ultralow.rb
# Hervat het in de wachtrij plaatsen van rebake-taken vanaf een specifiek punt en stuurt ze
# rechtstreeks naar de :ultra_low prioriteitswachtrij.
# voer uit binnen de container met -> rails runner slow_rebake_resumer_ultralow.rb
# --- Configuratie ---
BATCH_SIZE = 500
SLEEP_DURATION = 5
# --- Startpunt vanaf uw laatste update ---
last_processed_id = 0
# --------------------
start_time = Time.now
total_posts = Post.count
puts "Hervatten en in de wachtrij plaatsen van rebake-taken voor #{total_posts} posts naar de :ultra_low wachtrij..."
puts "Start na post ID #{last_processed_id}."
puts "---"
loop do
# Vind efficiƫnt de volgende batch posts om te verwerken
posts_to_enqueue = Post.where("id > ?", last_processed_id).order(id: :asc).limit(BATCH_SIZE)
# Verlaat de lus als er geen posts meer zijn
break if posts_to_enqueue.empty?
posts_to_enqueue.each do |post|
begin
# Definieer alle opties in ƩƩn hash, inclusief de doelwachtrij
options = {
post_id: post.id,
cook: true,
bypass_bump: true,
queue: :ultra_low
}
# Plaats de taak in de wachtrij met de juiste, geverifieerde syntaxis
Jobs.enqueue(:process_post, options)
rescue => e
puts "!!! FOUT bij het in de wachtrij plaatsen van taak voor post ID #{post.id}: #{e.message}"
end
end
# Werk onze positie bij naar de laatste post ID in de huidige batch
last_processed_id = posts_to_enqueue.last.id
# Verkrijg een nauwkeurigere telling voor het voortgangsrapport
enqueued_count = Post.where("id <= ?", last_processed_id).count
# --- Voortgangsrapportage ---
percentage = (enqueued_count.to_f / total_posts * 100).round(2)
elapsed_minutes = ((Time.now - start_time) / 60).round(2)
puts "Geplaatst tot post ID #{last_processed_id}. Totaal geplaatst: ~#{enqueued_count} / #{total_posts} (#{percentage}%)"
puts "Verstreken tijd (deze sessie): #{elapsed_minutes} minuten."
puts "Taken worden naar de :ultra_low wachtrij gestuurd."
# Pauzeer tussen batches om de belasting laag te houden
if enqueued_count < total_posts
puts "Slaapt voor #{SLEEP_DURATION} seconden..."
sleep(SLEEP_DURATION)
puts "---"
end
end
puts "\nAlle resterende rebake-taken zijn succesvol naar de :ultra_low wachtrij geplaatst!"