OneboxとYouTubeに関する問題

例:

Fakebook テーマや TLP プラグインのトピックリストで、YouTube のサムネイルが表示されない問題が発生しています。

再現手順(STR):

YouTube 動画を投稿し、Fakebook テーマに切り替えると、サムネイルが表示されません。

回避策:

投稿を再構築するとサムネイルが表示されますが、ユーザーは管理者の介入なしに直ちにサムネイルが表示されることを期待しているため、これは適切な解決策ではありません。

追加情報:

Topic.image_urlnil になっているようです。

この問題は 8 月初旬以降に発生したもののようです。8 月 5 日以前は機能していたと思われます(ただし、実際にいつ壊れたかは確信が持てません)。これは Onebox の新バージョンのリリース時期とほぼ一致していると感じています。

以前のビルドでテストしたところ、この問題は発生しませんでした。これにより、YouTube の og 応答に問題はないと推測しています。また、Fakebook テーマでも TLP プラグインと同じ挙動が見られるため、TLP プラグイン自体が原因ではないと考えられます。したがって、Discourse または Onebox の最近の回帰(バグ)ではないかと疑っています。

これは Topic List Previews を使用するユーザーにとって深刻な問題です。

「いいね!」 4

追記:Git Bisect を実施したところ、問題のコミットは以下のもののようです:

「いいね!」 3
diff --git a/lib/cooked_post_processor.rb b/lib/cooked_post_processor.rb
index ac16eb82c16..46050a69e40 100644
--- a/lib/cooked_post_processor.rb
+++ b/lib/cooked_post_processor.rb
@@ -28,7 +28,7 @@ def initialize(post, opts = {})
     @cooking_options = @cooking_options.symbolize_keys
 
     @doc = Nokogiri::HTML::fragment(post.cook(post.raw, @cooking_options))
-    @has_oneboxes = post.post_analyzer.found_oneboxes?
+    @has_oneboxes = @doc.css("aside.onebox").count > 0
     @size_cache = {}

@nbianca なぜ、ここでは post.post_analyzer.found_oneboxes? メソッドをもう使わなくなったのですか?

oembed または iframe を使用するすべての Onebox は、新しい CSS セレクターモードでは失敗し、これによりコードベース全体で Onebox 検出の挙動が異なってしまいます。

「いいね!」 4

@nbianca 同意します。これは非常に脆弱な変更に見えますが、なぜこのメソッドが選択されたのでしょうか?

「いいね!」 2

問題は、First Onebox が、リンクが Onebox かどうかに関係なく、投稿されたすべてのリンクに対して付与されてしまったことです。これは、PrettyText がすべてのリンクに class="onebox" を追加し、その後 Oneboxeronebox クラスを持つすべてのリンクの解析を試みるために発生します。

私が行った変更は、最終的なドキュメントに Onebox(onebox クラスを持つ aside 要素)が含まれているかどうかを確認するものです。さらに詳しく調査し、何が、なぜ壊れているのかを確認した上で、両方の問題を解決する変更を持って戻ってきます。

「いいね!」 7

ここを改善し、この PR を作成しました。

v2.3.2 をテストしたところ、YouTube リンクがトピックの image_url 属性を設定していないようです。その理由は、画像が img タグの src 属性から抽出されるためですが、YouTube 動画がリンクされている場合、background-image CSS 属性を持つ <div> が存在するためです。

以前は image_url が設定されていたと確実におっしゃれますか?

「いいね!」 5

ご覧いただきありがとうございます。こちらで確認の上、改めてご連絡いたします。

@nbianca 申し訳ありません。これはおそらく2つの問題が組み合わさったものかもしれません。

TLP プラグインを使用した場合、このコミット以前までは正常に動作していました。

このコミット以降、TLP では失敗します。

YouTube については、デフォルトの状態ではそのプロパティが設定されていないという点に同意します。

つまり、TLP はオーバーライドの処理がより優れていたようですが、現在変更された何かに依存していたようです。

参考までに、関連するオーバーライドは以下にあります:
https://github.com/angusmcleod/discourse-topic-previews/blob/master/lib/cooked_post_processor_edits.rb

さらに分析を行う必要があると思いますが、TLP を破綻させるほどの変更が行われたようです。

もう少し詳しく調べてから、再度元に戻します。残念ながら、今後数日は手が取れないかもしれません。

「いいね!」 1

そのコミットがどうやって TLP プラグインを壊すのか分かりません :thinking: バイセクトは 100% 確実ですか?

「いいね!」 1

bisect が cooked_post_processor の変更を検出したのは非常に奇妙ですが… 再確認して元に戻します。

はい、確認しました:

このコミットでは失敗します:7c83d2eeb261ac676a8320e6a704752c56fd242e
それ以前のこのコミットでは問題ありません:922c40f87cdceb8197dd61361334e0def23f13d5

「いいね!」 1

問題はここで修正されました:

「いいね!」 7