زر "عرض المشاركة الكاملة" لا يعمل في التثبيتات الفرعية

إنه يفعل :slight_smile:

هل يمكنك الوصول إلى المثيل الذي يعمل عليه هذا؟ إذا كان الأمر كذلك، هل يمكنك تشغيل ما يلي وإخباري بالنتيجة:

./launcher enter app
rails c
TopicEmbed.find_by(topic_id: 157441).as_json
discourse(prod)> TopicEmbed.find_by(topic_id: 157441).as_json
Serializing ActiveRecord models (TopicEmbed) without specifying fields is not allowed. Use a Serializer, or pass the :only option to #serializable_hash. More info: ``https://meta.discourse.org/t/-/314495
=>
{“id”=>56685,
“topic_id”=>157441,
“post_id”=>483289,
“embed_url”=>
“``https://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix”``,
“content_sha1”=>nil,
“created_at”=>“2025-12-08T17:54:07.585Z”,
“updated_at”=>“2025-12-09T18:04:33.539Z”,
“deleted_at”=>nil,
“deleted_by_id”=>nil,
“embed_content_cache”=>“”}
discourse(prod)>

هل قمت بتعديل المخرجات قبل مشاركتها؟ بالنظر فقط إلى قيمة embed_url، فهي

“``https://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix”``

هل يمكنك فقط تشغيل نفس الأمر مرة أخرى، ولكن هذه المرة:

./launcher enter app
rails c
TopicEmbed.find_by(topic_id: 157441).embed_url

إذا كانت القيمة التي شاركتها هي بالفعل قيمة embed_url في قاعدة بياناتك، فهذه هي المشكلة، وسأقوم بإنشاء طلب سحب (PR) صغير إلى discourse/discourse للتعامل مع الحالات القصوى مثل هذه حيث انتهى الأمر بـ embed_url في حالة سيئة التكوين.

لا! لقد نسختها ولصقتها هنا للتو.

discourse(prod)⟩ TopicEmbed.find_by(topic_id: 157441).embed_url
=> “https://tecnoblog.net/noticias/paramount-oferece-us-108-bilhoes-em-dinheiro-para-tomar-warner-da-netflix”
discourse(prod)⟩

هنا يمكنك رؤية موضوع تم إنشاؤه باستخدام Embed JS:

https://tecnoblog.net/comunidade/t/microsoft-edge-ganha-copilot-mode-que-promete-realizar-tarefas-usando-ia-tecnoblog/157661
لا يعمل خيار “إظهار المشاركة الكاملة” في هذا الموضوع أيضًا.

إعجاب واحد (1)

إذًا المشكلة بأكملها هي لأن طلب السحب (PR) أعلاه بدأ بإزالة الشرطات المائلة النهائية من TopicEmbed في يناير من هذا العام؟ أشعر بتضارب بشأن هذا التغيير. أُفضل أن نحترم ما يرسله لنا المسؤول بصراحة.

أعتقد أن هذا هو أصل مشاكلنا.

هل يمكنك تشغيل ما يلي يا @Thiago_Mobilon

url = "https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento"

fd = FinalDestination.new(url, validate_uri: true, max_redirects: 5, follow_canonical: true)

uri = fd.resolve

puts uri

html = FinalDestination::HTTP.get(uri)

puts html.truncate(200)

يجب أن يكون fd.resolve قادراً على إضافة الشرطة المائلة النهائية في سطر puts uri. أخشى أنه يفشل.

إعجاب واحد (1)
discourse(prod)<U+202B>> url = "https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento"
discourse(prod)<U+202B>> 
discourse(prod)<U+202B>> fd = FinalDestination.new(url, validate_uri: true, max_redirects: 5, follow_canonical: true)
discourse(prod)<U+202B>> 
discourse(prod)<U+202B>> uri = fd.resolve
discourse(prod)<U+202B>> 
discourse(prod)<U+202B>> puts uri
discourse(prod)<U+202B>> 
discourse(prod)<U+202B>> html = FinalDestination::HTTP.get(uri)
discourse(prod)<U+202B>> 
discourse(prod)<U+202B>> puts html.truncate(200)
https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento

=> nil
إعجاب واحد (1)

إنه لا يتبع عمليات إعادة التوجيه بالفعل. هل يعمل المنتدى على نفس الخادم/نطاق IP مثل المدونة؟ قد يؤدي هذا إلى تشغيل حماية SSRF الخاصة بنا.

إذا كانت هذه هي الحالة، فأنت بحاجة إلى السماح بذلك عبر تعيين allowed_internal_hosts

إعجابَين (2)

لاحظ أن

السبب الذي جعلنا نجري هذا التغيير هو وجود عدم اتساق بين كيفية عمل تضمينات WP Discourse وتضمينات javascript. كانت تضمينات javascript تقوم دائمًا بتطبيع عنوان URL. جاءت تضمينات WP Discourse عبر مسار مختلف ولم تكن تقوم بتطبيع عنوان URL (حتى أجرينا التغيير). أدى ذلك إلى بعض حالات عدم الاتساق الأخرى.

إعجابَين (2)

هل تقصد شيئًا كهذا؟ (كان هكذا بالفعل)

لا، إنه على خادم افتراضي خاص (VPS) مخصص. يقوم جهاز المدونة بتوكيل حركة المرور (nginx) للمجلد الفرعي إلى خادم Discourse الافتراضي الخاص (VPS).

هناك مشكلة أخرى وهي أنه عندما أقوم بتشغيل أمر curl إلى واجهة برمجة التطبيقات (API)، والبحث عن مُعرِّف الموضوع (topic ID) الخاص برابط التضمين (embed URL)، لا يمكنني العثور عليه بسبب الشرطة المائلة اللاحقة (trailing slash). يُرجع Discourse صفحة 404.

ولكن إذا قمت بإزالة الشرطة المائلة اللاحقة، فإنه يُرجع القيمة:

mobilon@Thiagos-MacBook-Pro ~ % curl 'https://tecnoblog.net/comunidade/embed/info?embed_url=https://tecnoblog.net/noticias/anatel-e-receita-apreendem-quase-meio-milhao-de-produtos-em-santa-catarina/' -H 'API-KEY: <API KEY>' -H 'API-USERNAME: <USERNAME>'

<!DOCTYPE html>

<html lang="pt-BR">

<head>

  <meta charset="utf-8">

  <title>الصفحة غير موجودة - مجتمع Tecnoblog</title>
mobilon@Thiagos-MacBook-Pro ~ % curl 'https://tecnoblog.net/comunidade/embed/info?embed_url=https://tecnoblog.net/noticias/anatel-e-receita-apreendem-quase-meio-milhao-de-produtos-em-santa-catarina' -H 'API-KEY: <API KEY>' -H 'API-USERNAME: <USERNAME>' 

{"topic_id":157645,"post_id":484103,"topic_slug":"anatel-e-receita-apreendem-quase-meio-milhao-de-produtos-em-santa-catarina-tecnoblog","comment_count":15}%     

لجعل الأمر يعمل، سأحتاج إلى إجراء استبدال للسلسلة النصية (str replace) في ووردبريس (WordPress)، لإزالة الشرطة المائلة اللاحقة من الرابط الدائم (permalink) قبل التحقق. ولكن هذا لا معنى له، فالرابط الكنسي (canonical URL) يحتوي على الشرطة المائلة اللاحقة…

عمليًا، يقوم Discourse بتطبيع الرابط الدائم إلى عنوان URL غير موجود… يجب أن يكون الإصدار المُطَبَّع هو الذي يحتوي على الشرطة المائلة اللاحقة.

إعجاب واحد (1)

بفضل @Thiago_Mobilon وجدت المشكلة ولدي إصلاح مقترح

إعجابَين (2)

@Thiago_Mobilon الإصلاح مُضمَّن، هل يمكنك التحديث من فضلك؟

إعجاب واحد (1)

إنه يعمل، شكرًا فالكو!

لكنني ما زلت قلقًا بشأن عناوين URL التي لا تحتوي على شرطة مائلة لاحقة، للأسباب المذكورة في منشوري السابق. هل يجب أن أفتح موضوعًا جديدًا حول هذا @angus؟

شكرًا لك، هذا خبر رائع.

بالتأكيد! لن يؤثر ذلك على ميزة “المنشور الكامل” حيث يمكننا الآن متابعة عمليات إعادة التوجيه في المواقع الموجودة في نفس نطاق المنتدى، ولكن يمكنك المتابعة في موضوع جديد للمخاوف الأخرى.

3 إعجابات