Rebake mit Rails-Befehl oder Rake-Task funktioniert nicht, aber das Neuerstellen von HTML schon. Warum?

Hier ist mein aktueller Stand:

Nachdem ich versucht habe, post.rebake!(invalidate_broken_images: true) für alle meine 40.000 Beiträge auszuführen, die den String [img] enthalten, hat es bei vielen Bildern funktioniert… Aber bei weitem nicht bei allen, obwohl sie auf demselben externen Bild-Hosting-Dienst gehostet werden.
Zum Beispiel habe ich Tausende von “funktionierenden” Casimages-Links (die auf gültige Bilder verweisen und Bilder in der Vorschau beim Bearbeiten anzeigen), die in der “gebackenen” Version der Beiträge kaputt sind, die aber dank meines Skripts ordnungsgemäß auf dem Server angezeigt und hochgeladen wurden. Aber ich habe auch viele andere, bei denen es einfach nicht funktioniert hat, und ich weiß nicht warum.

Post.where('raw LIKE ?', '%[img]%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
end

Ich habe auch Bildlinks von anderen Bild-Hostern, die hochgeladen wurden, und einige, bei denen es nicht funktioniert hat.
Ich konnte keinen Unterschied zwischen diesen Beiträgen und Bildlinks feststellen. Sie enthielten alle funktionierende Bilder, und die Tatsache, dass sie denselben Bild-Hoster verwendeten, hat mich verwirrt.
Ich habe den Vorgang mehrmals versucht und die Ergebnisse waren inkonsistent, unabhängig von den externen Hosting-Diensten… Einige Bilder wurden hochgeladen, andere nicht. Es schien zufällig zu sein.
Es erinnert mich ein wenig an das Problem, das @Amethi hatte: Some linked images not displaying/show as broken - #8 by Amethi, wo es nur bei einigen Bildern ohne Erklärung funktionierte.


:information_source: Ich werde hier nur über Casimages sprechen, obwohl mein importiertes Forum verschiedene andere Bild-Hoster verwendete.

Also dachte ich, dass Casimages vielleicht meine IP vorübergehend sperrt, wenn ich versuche, zu viele Bilder von ihren Servern abzurufen. Das könnte erklären, warum es nicht bei allen Bildern funktioniert hat und warum der Erfolg beim Hochladen der Bilder von meinem Server zufällig war.
Es gab sogar Fälle, in denen die Option “HTML neu generieren” funktionierte - zunächst nur -, die Bilder wurden dann angezeigt, anstatt ein kaputtes Bildsymbol anzuzeigen, obwohl sie immer noch auf ihrem externen Hosting-Dienst gehostet wurden. Aber als die Sidekiq-Aufgabe “Externe Bilder abrufen” ausgelöst wurde, wurden die Bilder kaputt.
Dasselbe gilt für die Verwendung von Rail-Skripten mit rebake!(invalidate_broken_images: true).
:weary:

Daher versuche ich derzeit einen langsameren Ansatz, bei dem ich 5 Sekunden zwischen jedem meiner Rail-rebake!-Befehle warte:

total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
    print "#{i}/#{total}"
    print "\r"
    i +=1
    sleep(5)
end

Ich werde in etwa 60 Stunden sehen, ob es besser gelaufen ist…

Ich möchte die Grundlagen meines Problems hier verstehen und warum ein “normales” rebake ein Bild nicht auf dem Server hochladen kann (wenn ich nicht vorübergehend von Casimages gesperrt werde).

Beachten Sie, dass dieses Mal das Zertifikat des Casimages-Servers in Ordnung zu sein scheint:smile:

Ich verstehe auch nicht, was invalidate_broken_images wirklich tut. Ich bin mit dem Code von Discourse nicht sehr vertraut.

Ich habe mir den Code angesehen, um die Vorkommen von invalidate_broken_images zu sehen, und diese Dateien gefunden:

Warum wird speziell nach dem String <img> gesucht? Meine Beiträge stammen aus einem importierten phpBB und die Rohversion enthält nur [img] BBCode, keine <img>-Tags. Wie könnte es also (und es hat, siehe meine vorherige Nachricht) Auswirkungen auf meine Beiträge haben? :thinking:

Ich verstehe auch nicht wirklich den Unterschied zwischen diesen beiden Methoden (?):

Es scheint zu sagen, dass rebake die Standardargumente auf false setzt und dass rebake! das Standardargument auf true setzt.

Wie hängen diese beiden zusammen (ich bin mir übrigens des Zwecks des !-Zeichens in Ruby bewusst) und warum befinden sie sich in verschiedenen Dateien?

Mein Ziel ist es nur zu verstehen, warum meine externen Bilder manchmal hochgeladen werden und manchmal nicht, und ob ich einen zuverlässigen Weg finden kann, sie ordnungsgemäß und automatisch hochzuladen, auch wenn dies bedeutet, stündlich ein Bild hochzuladen. :sweat_smile:
Ich arbeite seit fast zwei Wochen daran und es macht mich (und die Leute, für die ich ihren Server migriert habe) wahnsinnig. :woozy_face:

Außerdem gibt es nichts im Discourse-Log, außer mehreren Meldungen wie Sidekiq is consuming too much memory (using: 592.25M). Beachten Sie, dass ich unter Ubuntu über WSL unter Windows 10 arbeite, aber ich beabsichtige, eine funktionierende Lösung (wenn ich eine finde…) auf unserem VPS zu verwenden.

1 „Gefällt mir“