Youtube embeds missing

I have a client for whom embedded youtube videos are missing. They appear in composer’s preview, but when the messages are saved, they disappear. They are working fine in try.discourse.org. I tried whitelisting youtu.be and changing the URL to a youtube.com url too. Neither solved the problem.

The site is running v1.6.0.beta11 +141

Have you tried reaching YouTube from your client’s server?

It seems that the problem was that recent Discourse updates have caused my DOI resolver plugin to muck things up. (I disabled a couple other things too, but it was definitely some plugin. . . )

youtube.com の投稿再バク時に 429 Too Many Requests のエラーに遭遇する問題はありますか?

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 5237

:thinking:

私も同じ問題に遭遇しました。これは一時的なIPバン(1時間程度だと思います)で、その間、リベイクされた投稿のすべてのYouTubeワンボックスが機能しません。

リベイク時に1時間あたりのYouTubeへのリクエスト数をx回以下に制限する仕組みを導入すべきではないでしょうか?

最近、Discourse インストールに対して一連の変更とアップグレードを行った後、以下の 2 つの問題が残っています。1 つ目はデータコンテナを再構築できないことで、解決策を探っている最中です。もう 1 つは、YouTube の URL 以外のすべての Onebox は機能するが、YouTube の URL だけは機能しないという問題です。

サーバーおよびコンテナ内から YouTube への CURL コマンドは正常に動作します。これが一時的な IP 禁止によるものかどうかを確認するにはどうすればよいでしょうか?

編集: Rebuild(App)および Rebake のどちらもこの問題に影響を与えないことを確認しました。

編集 2: 検索したところ、@jomaxroこちらで CloudFlare などのサービスが Onebox に影響を与える可能性があるとコメントしていました。CDN は特定の 1 つの Onebox のみに影響を与えることがあるのでしょうか?Development Mode に設定してみましたが、変化はありませんでした。

編集 3: すべてのプラグインを削除してみましたが、何も変わりませんでした。(また、プロセスが互いに干渉しているようなので、再ベイクも実行できていません。)

編集 4: @Overgrow のコマンドを実行してみたところ、確かに_問題が発生していました_。

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 72674

コンテナから以下のエラーが出力されるため、再ベイクコマンドを実行するのが非常に困難です。

PG::UnableToSend: no connection to the server

PG::ConnectionBad: PQconsumeInput() SSL SYSCALL error: EOF detected

何かを停止する必要がありますか?

単純にパターンマッチングを使用して再ベイクし、遅延を設定するというアプローチもあります。

例えば:

rake posts:rebake_match["%youtube%",regex,10]

私の主な問題は、コマンドを実行できないことです :sweat:

これは、ゆっくりと再構築を行うために機能するかもしれません:Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)

まず第一に、@riking さん、お時間を割いてお手伝いいただき、心から感謝申し上げます。

そのコマンドを実行したところ、欠落している投稿数と思われる 22462 という数字が返ってきました。コマンドの最後の部分に基づくと、これはバックグラウンドで実行されていると判断してよいでしょうか?

はい、15分ごとに実行されるジョブがあり、SiteSetting.rebake_old_posts_count で指定された投稿を再処理します。

質問です。時間が経っても数が減りません。そのジョブを追跡するか、強制実行する方法はありますか?

うーん、私が間違えた可能性もありますね :thinking: これの結果はどうなりますか? Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count

現在のステータス:

古いコマンド:

[2] pry(main)> Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)
=> 23257

新しいコマンド:

[1] pry(main)> Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count
=> 49458

編集:時間が経過後、2 つ目のコマンドの値は一定(同じ値)のままですが、1 つ目のコマンドの値は増加し続けていることを確認しました。

投稿内の文字列に一致させるために正規表現は必須ではありません。単純な文字列検索でも、例えば youtube といった文字列には十分一致します。この例では、投稿内に youtube という文字列が含まれるすべての投稿がリベイクされますが、100 秒に 1 つずつ処理されるため、非常に遅いです…

Screen Shot 2020-05-26 at 11.23.06 AM

約 100 秒経過:

Screen Shot 2020-05-26 at 11.25.35 AM

このまま実行させます。76,200 秒前後でこの rake タスクが完了するだろうと予想しています :slight_smile:

もし最初からこの例を 10 秒の遅延に設定しておけばよかったと後悔しています :slight_smile:

@neounix さん、どうもありがとうございます。

試してみましたが、残念ながら成功しませんでした。

もしかして、ネットワークに関連する問題があるのかもしれませんね?

@iceman さん、申し訳ありませんが、

私はどちらかと言えば理系人間なので、「成功しなかった」というのが具体的に何を意味するのかよくわかりません :slight_smile:(技術的な情報が不足しています)

rake コマンドを実行した際に Rails のエラーが発生する、ということでしょうか?

もしそうであれば、Rails のエラーメッセージ全体を貼り付けてください。

あるいは、Rails タスクは正常に実行されたのでしょうか?もしそうなら、rake タスクによって再加工された投稿数は何件でしたか?

よろしくお願いいたします。

例えば、私の小さな(非常に遅く、100 秒の遅延がある)サンプルの再加工タスクは、このトピックに対して数時間実行されています:

Screen Shot 2020-05-26 at 5.09.07 PM

現在、合計 762 件中 209 件……

あなたの再加工タスクの数値はどうなっていますか?

ご無礼な情報をお伝えして申し訳ありません!

私の意図は、小さなサンプルで実行した後、再度実行しましたが、数値が変化しなかったということです。

つまり、コマンドを実行した時点で投稿数が 76,000 件あり、200 件の処理が完了して停止しました。その後再度実行すると、新しい数値は 76,200 件になっていました(もしかするとユーザーが YouTube 関連で 400 件の投稿を追加したのかもしれませんが…わかりません)。

今は再度実行して様子を見ていますが、完了まで数日かかるでしょう :P(76,500 件ヒット…)

他の誰にもこの問題が発生していないため、私の環境変数を考えてみました。具体的には以下の通りです:

  • 機械を変更しました(YouTube のレート制限が原因かもしれません?)
  • 新しいインストールに Discourse のバックアップを復元しました(これは関係ないはずですが、この段階では動くもの全てを疑っています)
  • 2 つのコンテナインストール(データ再構築に問題があると思い込んでいましたが、@Falco さんからのこの情報のおかげで、これは「正常」だとわかりました)
  • ここにある CDN チュートリアルに従って、CloudFlare を上に設置しました。

[quote=“Iceman, post:19, topic:47718”]
日本語訳:コマンドを実行したところ、投稿数が 76,000 件でした。200 件の再構築(rebake)を行った後に停止し、再度実行したところ、新しい数値は 76,200 件になっていました(はい、もしかするとユーザーが YouTube を含む 400 件の投稿を追加したのかもしれませんが…しかし、私はわかりません)。[/quote]

私の理解が鈍くてすみません :slight_smile: おっしゃる通り、この Rake タスクを実行しているということでしょうか?

rake posts:rebake_match['youtube',string,10]

入力した内容と表示された内容を正確に記載することが重要です。

どの Rake タスクを、どのようなパラメータで実行していますか?

その Rake タスクを実行した際、再構築(rebake)が開始された直後の最初の数行の出力は何ですか?

詳細、スクリーンショット、コマンドラインからのコピー&ペーストなどを投稿してください。

@neounix さん、申し訳ありませんが、100% おっしゃる通りです。

言い直させてください。

私はこのコマンドを実行しました。

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string]
        76597 / 76594 (100.0%)-
    76597 posts done!

その後、「まあ、当然だよね。タイマーを追加しないと『レートリミット理論』を検証できない」と思い、あなたが投稿したものを試してみました。

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
            216 / 76594 (0.2%)-

そして、変化があるか確認するために一旦停止しました。どうやら何も変わっていないようなので、「よし、もう一度実行して様子を見てみよう」と考えました。

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
           116 / 76598 (0.2%)-

現在これが実行中です。私の主張は、他の rebake 実行時と比べて総投稿数が減少しなかったという点です(この論理が間違っている可能性があり、おそらく間違っています)。