サブフォルダインストールで「投稿全体を表示」ボタンが機能しない

できます :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
ActiveRecordモデルをフィールドを指定せずにシリアライズすることは許可されていません。Serializerを使用するか、#serializable_hashに:onlyオプションを渡してください。詳細: ``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 の値である場合、それが問題です。embed_url がこのように不正な状態になったエッジケースに対処するため、discourse/discourse に小さな PR を作成します。

いいえ!ここにコピー&ペーストしただけです。

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が今年1月に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)

puts uriの行でfd.resolveが末尾のスラッシュを追加できるはずです。それが失敗しているのが心配です。

「いいね!」 1
discourse(prod)> url = "https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento"
discourse(prod)> 
discourse(prod)> fd = FinalDestination.new(url, validate_uri: true, max_redirects: 5, follow_canonical: true)
discourse(prod)> 
discourse(prod)> uri = fd.resolve
discourse(prod)> 
discourse(prod)> puts uri
discourse(prod)> 
discourse(prod)> html = FinalDestination::HTTP.get(uri)
discourse(prod)> 
discourse(prod)> 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で動作しています。ブログのサーバーがサブディレクトリのトラフィックをDiscourse VPSにプロキシ(nginx)しています。

もう一つの問題は、埋め込みURLのトピックIDを検索するためにAPIにcurlを実行すると、末尾のスラッシュのためにそれを見つけることができないことです。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 Comunidade</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}%     

動作させるためには、確認する前にWordPressでパーマリンクの末尾のスラッシュを削除するためにstr_replaceを行う必要がありますが、これは意味がありません。カノニカルURLには末尾のスラッシュがあるからです…

実際には、Discourseはパーマリンクを存在しないURLに正規化しています…正規化されたバージョンは末尾のスラッシュがあるものになるべきです。

「いいね!」 1

@Thiago_Mobilonのおかげで、問題を見つけ、修正案を提案できました

「いいね!」 2

@Thiago_Mobilon 修正を適用しました。更新をお願いできますか?

「いいね!」 1

動作しました、Falcoさん、ありがとう!

しかし、前の投稿で述べた理由から、末尾のスラッシュがないURLについてはまだ懸念があります。これについては新しいトピックを開くべきでしょうか、@angusさん

ありがとうございます、それは素晴らしい知らせです。

はい、もちろんです!フォーラムと同じドメインのサイトではリダイレクトを追跡できるようになったため、「完全な投稿」機能には影響しませんが、その他の懸念については新しいトピックでフォローアップしてください。

「いいね!」 3