できます ![]()
これが実行されているインスタンスにアクセスできますか?もし可能であれば、以下を実行して結果を教えていただけますか?
./launcher enter app
rails c
TopicEmbed.find_by(topic_id: 157441).as_json
できます ![]()
これが実行されているインスタンスにアクセスできますか?もし可能であれば、以下を実行して結果を教えていただけますか?
./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
このトピックでも「投稿全体を表示」は機能しません。
つまり、この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が末尾のスラッシュを追加できるはずです。それが失敗しているのが心配です。
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
リダイレクトが追跡されていないのは事実です。フォーラムはブログと同じサーバー/IP空間で実行されていますか?当社のSSRF保護をトリガーしている可能性があります。
その場合は、設定 allowed_internal_hosts を介して許可する必要があります。
結局、この問題全体は、今年の1月に上記のPRがTopicEmbedから末尾のスラッシュの削除を開始したことが原因なのでしょうか?
以下に注意してください
ちょっとした補足ですが、最新バージョンのDiscourseでこれら2つのコマンドをローカルで実行すると、記事のHTML本文が得られるという同じ結果になります。
# 末尾のスラッシュあり TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento/") # 末尾のスラッシュなし TopicEmbed.find_remote("https://tecnoblog.net/noticias/governo-renova-app-da-cnh-para-baratear-obtencao-do-documento") # 同じ結果を生成する
この変更については複雑な心境です。正直なところ、管理者が私たちに送ってくれたものを尊重したいです。
私たちがその変更を行った理由は、WP Discourseの埋め込みとJavaScriptの埋め込みの動作に一貫性がなかったためです。JavaScriptの埋め込みは常にURLを正規化していました。WP Discourseの埋め込みは別のルートから入ってきており、URLを正規化していませんでした(私たちが変更を行うまでは)。それが他のいくつかの不整合につながっていました。
その場合、
allowed_internal_hosts設定を介して許可する必要があります
このようにですか?(すでにこのようになっていました)
フォーラムはブログと同じサーバー/IPスペースで動作していますか?
いいえ、専用の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に正規化しています…正規化されたバージョンは末尾のスラッシュがあるものになるべきです。
@Thiago_Mobilonのおかげで、問題を見つけ、修正案を提案できました
main ← fix-final-destination-subfolder-ignore
For subfolder installs (e.g. `example.com/forum`), `FinalDestination` was ignori…
@Thiago_Mobilon 修正を適用しました。更新をお願いできますか?
@Thiago_Mobilon 修正を適用しました。更新していただけますか?
動作しました、Falcoさん、ありがとう!
しかし、前の投稿で述べた理由から、末尾のスラッシュがないURLについてはまだ懸念があります。これについては新しいトピックを開くべきでしょうか、@angusさん?
Falco:
@Thiago_Mobilon the fix is in, can you please update?
It works, tks Falco!
ありがとうございます、それは素晴らしい知らせです。
しかし、以前の投稿で述べた理由から、末尾のスラッシュのないURLについてはまだ懸念があります。これについては新しいトピックを開くべきでしょうか、@angus?
はい、もちろんです!フォーラムと同じドメインのサイトではリダイレクトを追跡できるようになったため、「完全な投稿」機能には影響しませんが、その他の懸念については新しいトピックでフォローアップしてください。