Ich habe kürzlich unsere Discourse-Installation in einen Unterordner verschoben. Danach funktionierte die Schaltfläche „Vollständigen Beitrag anzeigen“ nicht mehr – man klickt, um den Inhalt zu erweitern, aber der vollständige Beitrag wird nicht geladen.
An meinen WP Discourse-Konfigurationen hat sich nichts geändert.
"\"\u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003e\\n\u003chr\u003e\\n\u003csmall\u003eEste é um tópico de discussão auxiliar para a entrada original em \u003ca href='https://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix'\u003ehttps://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix\u003c/a\u003e\u003c/small\u003e\\n\""
Das \u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003esollte der Inhalt sein.
Haben Sie zufällig auch die Blog-URL geändert?
Die Onebox-Anzeige kommt mir auch seltsam vor, ich würde erwarten, dass sie einen zwischengespeicherten gekürzten Inhalt anzeigt, daher gehe ich davon aus, dass body.present? in der obigen Bedingung falsch ist.
Können Sie sich in die Rails-Konsole einloggen und prüfen, ob TopicEmbed.where(topic_id: 157441).pick(:embed_url) Ihnen die korrekte Blog-Inhalts-URL anzeigt?
Hat dein Cloudflare-Bypass funktioniert? Es sieht so aus, als ob der Body für https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento nur 22 Zeichen lang ist, ohne einen Titel-Tag.
Ja! Alle Anfragen vom Discourse-Server werden umgangen:
Was mir aufgefallen ist, ist, dass die Einbettungs-URL am Ende keinen abschließenden Schrägstrich hat. Alle URLs sollten den abschließenden Schrägstrich haben.
Vielleicht folgt Discourse der Weiterleitung also nicht?
Aber warum speichert es die URL auch ohne den abschließenden Schrägstrich?
Ich bin nicht damit vertraut, wie WP-Discourse dies bestimmt, es sollte den Post-Kanoniker verwenden, aber ich bin mir da nicht sicher. Irgendwelche Ideen, @angus?
Gibt es eine Möglichkeit, Discourse zu zwingen, alle Einbettungs-URLs aus einer Kategorie zu aktualisieren und der endgültigen Zielseite zu folgen?
Ich beabsichtige, auf die Einbettung von Discourse (die vollständige Einbettung, die Sie getestet haben) umzusteigen, wenn diese für die Produktion bereit ist. Aber wenn die Einbettungs-URLs nicht übereinstimmen, würde dies wahrscheinlich neue Themen für jeden Beitrag erstellen und die Kommentare verlieren…
# Konfiguration
CATEGORY_SLUG = 'tb'
category = Category.find_by(slug: CATEGORY_SLUG)
unless category
puts "FEHLER: Kategorie '#{CATEGORY_SLUG}' nicht gefunden."
exit
end
puts "Starte vollständige URL-Überprüfung in der Kategorie '#{category.name}'..."
puts "Dies kann je nach Anzahl der Themen und der Antwort Ihres Servers dauern..."
count_updated = 0
count_errors = 0
count_ok = 0
Topic.where(category_id: category.id).find_each do |topic|
current_url = topic.custom_fields["embed_url"]
# Überspringen, wenn kein embed_url vorhanden ist
next unless current_url.present?
begin
# Führt die GET-Anfrage durch und folgt Weiterleitungen
response = Faraday.get(current_url)
final_url = response.env.url.to_s
# Wenn die Anfrage erfolgreich war (200 OK)
if response.status == 200
# Prüft, ob die endgültige URL von der in der Datenbank gespeicherten URL abweicht
# Der Vergleich ignoriert hier subtile Unterschiede, aber wir vergleichen exakte Strings
if final_url != current_url
puts "\n[AKTUALISIEREN] Thema ##{topic.id}:"
puts " Von: #{current_url}"
puts " Nach: #{final_url}"
topic.custom_fields["embed_url"] = final_url
topic.save_custom_fields(true)
count_updated += 1
else
# print "." # Zum Anzeigen des visuellen Fortschritts (Punkte) auskommentieren
count_ok += 1
end
else
puts "\n[HTTP FEHLER #{response.status}] Thema ##{topic.id} - URL: #{current_url}"
count_errors += 1
end
rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
puts "\n[VERBINDUNGSFEHLER] Thema ##{topic.id} - URL: #{current_url} - #{e.message}"
count_errors += 1
rescue StandardError => e
puts "\n[ALLGEMEINER FEHLER] Thema ##{topic.id} - #{e.message}"
count_errors += 1
end
# Optional: Kleine Pause, um Ihren WordPress-Server nicht zu überlasten
# sleep 0.1
end
puts "\n\nZusammenfassung:"
puts "------------------------------------------------"
puts "Überprüfte Themen (OK): #{count_ok}"
puts "Aktualisierte Themen: #{count_updated}"
puts "Gefundene Fehler: #{count_errors}"
puts "------------------------------------------------"
@Thiago_Mobilon Haben Sie im Zuge dieser Umstellung auch Ihr Discourse aktualisiert? Es könnte sein, dass wir hier die Anwendung der Standardisierung der embed_url-Normalisierung auf WP Discourse-Embeds sehen, was auf ein Update Ihres Discourse zurückzuführen ist, das gleichzeitig mit der Umstellung auf die Unterordner-Installation erfolgte. Welche Version von Discourse verwenden Sie aktuell? (und welche Version haben Sie vor der Umstellung verwendet, falls Sie das wissen?)
Nur eine Randnotiz: Wenn ich diese beiden Befehle lokal mit der neuesten Version von Discourse ausführe, erhalte ich das gleiche Ergebnis, nämlich den HTML-Body des Artikels
# mit abschließendem Schrägstrich
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento/")
# ohne abschließenden Schrägstrich
TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento")
# erzeugt das gleiche Ergebnis
Haben Sie vielleicht etwas auf der WordPress-Seite geändert?
Nein, das sind unterschiedliche Probleme. Der abschließende Schrägstrich trat auf, als wir in den Unterordner gewechselt sind, aber es gibt auch alte URLs von vor Jahren, die jetzt einen anderen Slug haben.
Ich musste die Installation neu erstellen, also ja, ich denke, dass dieser neue Standard die Ursache sein könnte.
Mein Vorschlag zur Behebung dieses Problems: Könnte Discourse nicht mindestens ein oder zwei Weiterleitungen folgen, um die Daten abzurufen? Das würde das Problem mit dem abschließenden Schrägstrich beheben und die Website auch gegen mögliche zukünftige URL-Änderungen absichern.
Außerdem ist es sicherer, da es nicht notwendig wäre, Skripte zur Aktualisierung alter Themen auszuführen, was auch der Datenbank schaden könnte.