Ich musste also live gehen, ohne auf den Abschluss des gesamten Rebake zu warten. Nachdem ich live gegangen war, konnte ich Rebake nicht ausführen, da dies den Server zum Absturz gebracht hätte. Ich konnte Rebake in der Standardwarteschlange ausführen, da dies alle anderen Prozesse wie Benachrichtigungen verzögert hätte.
Daher habe ich dieses Skript verwendet, um alle Rebake-Aufgaben in die Sidekiq-Warteschlange mit ultra-niedriger Priorität einzureihen. Ich teile es hier, falls jemand anderes es benötigt.
# slow_rebake_resumer_ultralow.rb
# Setzt das Einreihen von Rebake-Jobs von einem bestimmten Punkt fort und sendet sie
# direkt an die :ultra_low Prioritätswarteschlange.
# Führen Sie dies im Container mit -> rails runner slow_rebake_resumer_ultralow.rb aus
# --- Konfiguration ---
BATCH_SIZE = 500
SLEEP_DURATION = 5
# --- Startpunkt von Ihrem letzten Update ---
last_processed_id = 1952526
# --------------------
start_time = Time.now
total_posts = Post.count
puts "Setze das Einreihen von Rebake-Jobs für #{total_posts} Beiträge in die :ultra_low Warteschlange fort..."
puts "Beginne nach Beitrags-ID #{last_processed_id}."
puts "---"
loop do
# Effizientes Finden des nächsten Stapels von Beiträgen zur Verarbeitung
posts_to_enqueue = Post.where("id
# Beenden Sie die Schleife, wenn keine Beiträge mehr vorhanden sind
break if posts_to_enqueue.empty?
posts_to_enqueue.each do |post|
begin
# Definieren Sie alle Optionen in einem einzigen Hash, einschließlich der Zielwarteschlange
options = {
post_id: post.id,
cook: true,
bypass_bump: true,
queue: :ultra_low
}
# Reihen Sie den Job mit der korrekten, verifizierten Syntax ein
Jobs.enqueue(:process_post, options)
rescue =
puts "!!! FEHLER beim Einreihen des Jobs für Beitrags-ID #{post.id}: #{e.message}"
end
end
# Aktualisieren Sie unsere Position auf die letzte Beitrags-ID im aktuellen Stapel
last_processed_id = posts_to_enqueue.last.id
# Holen Sie sich eine genauere Zählung für den Fortschrittsbericht
enqueued_count = Post.where("id
# --- Fortschrittsberichterstattung ---
percentage = (enqueued_count.to_f / total_posts * 100).round(2)
elapsed_minutes = ((Time.now - start_time) / 60).round(2)
puts "Eingereiht bis Beitrags-ID #{last_processed_id}. Insgesamt eingereiht: ~#{enqueued_count} / #{total_posts} (#{percentage}%)"
puts "Verstrichene Zeit (diese Sitzung): #{elapsed_minutes} Minuten."
puts "Jobs werden an die :ultra_low Warteschlange gesendet."
# Pause zwischen den Stapeln, um die Last gering zu halten
if enqueued_count
puts "Warte #{SLEEP_DURATION} Sekunden..."
sleep(SLEEP_DURATION)
puts "---"
end
end
puts "\nAlle verbleibenden Rebake-Jobs wurden erfolgreich in die :ultra_low Warteschlange eingereiht!"