Youtube embeds missing

血と汗と涙の末、解決したと思います。

ただし、この解決策に特に「誇り」を感じているわけではありません。しかし、相手はGoogleですから、何も話してくれず、何も説明してくれません。したがって、結論は以下の通りです。

  • まず第一に、重要な教訓:Discourseを使用している場合は、DigitalOceanでIPv6を有効にしないでください。YouTubeがDigitalOceanのIPv6アドレス範囲をブロックしているためです。

  • IPv6の問題が修正された後、トラフィックの増加に伴い(ホストは何度か変更しました、本当に大変な旅でした)、その後起こったのは、YouTubeが当サイトのDiscourseインスタンスをIPブロックしたことです。これは、サイトに投稿されたYouTube動画の量と、Discourseがそれらを読み込む仕組みが原因でした。

  • このブロックを確認するには、サーバーをブラウザ付きのサーバーへのプロキシとして使用する、またはcurlを実行して以下の行を検索する必要があります。「申し訳ありませんが、中断いたします。ネットワークから大量のリクエストを受信しています。」(参考:このトピック

  • @riking@neounix@Overgrow のご支援により、YouTube埋め込みのバーク(画像生成)を停止、制限、または変更する一連のコマンドを実行しました(上記参照)。多くのサイトではこれで十分ですが、私は数回のホスト変更を試みた後、サイトが移行されたため、以前の投稿すべてを再バークする必要がありました。実際、1時間ごとに1回に制限することで、最初は「まあまあ」解決しました。しかし、私のコミュニティは「動画を共有するのが本当に大好き」なようで、その効果は長続きしませんでした。

  • もちろん、YouTubeからはフィードバックやサポートは一切ありません。公式フォーラムにはエラーに関するスレッドがいくつかあり、コメントには「私も同じ問題を抱えています」という声はありますが、解決策は提示されていません。

  • こうした状況下で、インフォマーシャルの「他にも方法があるはずだ!」というロジックを思い出し、「ラムボ」的なアプローチを選択しました。別のIPアドレスを購入し、1時間ごとに発信元IPアドレスを切り替えるcronジョブを追加しました。これで問題は解決しました。

サイトが成長し続け、人々が「YouTubeへの愛を共有し続ける」場合、3番目のIPアドレスを取得する必要があるかもしれません。しかし、K8Sなどで「分散型Discourse」を実現する正しい方法を見つけるまでの間は、これが最善策です。

最もエレガントな解決策ではないことは承知しています。

改めて、ご支援(そして何より忍耐)に感謝します。Rails/Sidekiq/RubyConsoleの組み合わせについては、私が非常に未熟であることを理解していただいていると思います。Discourseのコードを読みながら、改善に努めています。

ありがとうございました!