neounix
(Dark Matter)
22
@Iceman さん、こんにちは。
あなたの理解は間違っておりません。問題は解決しようとしておられるだけで、おそらく YouTube の埋め込みが機能していないことにいら立ちを感じておられるのでしょう。
次のコマンドを実行するとします。
# time rake posts:rebake_match['youtube',string,100]
116 / 76598 (0.2%)-
この場合、遅延が 100 秒に設定されているため、100 秒ごとに 1 つの投稿しか再構築されません。このパターンで再構築が必要な投稿は約 7 万 7 千件あるため、完了までに約 90 日かかってしまいます。私が 100 を使ったのは単なる例示であり、推奨ではなかったのです。もし混乱させてしまったのであれば申し訳ありません 
遅延を 10 秒に変更したとしても、再構築には約 9 日かかります。
「YouTube の再構築」をどのくらいのペースで実際に行いたいとお考えですか?
管理者として、各投稿の下にあるボタンをクリックすることで、「HTML の再構築」を簡単に実行できます。
Iceman
(Iceman)
27
@neounix さん、ありがとうございます。
1 つの投稿で YouTube リンクを試してみました:
root@cont-web-only:/var/www/discourse# rake posts:rebake_match['icemanworkingonthisheadache',string,5]
1 / 1 (100.0%)
1 posts done!
その後、その投稿を確認しましたが、まだリンクのみが表示され、Onebox は表示されません。(キャッシュなし、クッキーなし、別の PC でも確認しました :P)
@Overgrow さん、ありがとうございます。
また、上記の rebake コマンドを実行する前と後に、同じ投稿と別の投稿で「HTML の再構築」を試しましたが、成功しませんでした。
neounix
(Dark Matter)
28
@iceman さん、こんにちは。
これは大きな手がかりですね。rake タスクを使って単一の投稿を再ビルドしても問題が解決しないことがわかりました(@Overgrow さんが提案した UI からの HTML 再ビルドも機能しないことも確認済み)。これは、あなたが以前お伝えしようとしていたことそのものです。
ステップバイステップのトラブルシューティングにご協力いただき、ありがとうございます。
少し考えてみます。その間にも、問題がより明確になったことで、他の人からアイデアが寄せられるかもしれません。
編集:
@Iceman
解決していない YouTube リンク(おそらく ‘icemanworkingonthisheadache’ というテキストを追加した場所など)をここに投稿してください。ここで Onebox が機能することを確認しましょう(私は私のステージングサイトの 1 つでも試してみます)。
Iceman
(Iceman)
29
了解しました、@neounix
これは YouTube の動画なら何でも起こる現象ですが、一貫性のために、特に今回試した 2 つの動画は以下の通りです。
編集:はい、こちらでは動作しています。
補足ですが、私のインストール環境ではプレビューパネルに表示させることができません。
neounix
(Dark Matter)
30
しかし、他の「YouTube 以外」のワンボックスは、@Iceman さんのサイトでは正常にレンダリングされていますか?
Iceman
(Iceman)
31
こんにちは、@neounix
はい、他のすべての onebox は期待通り動作します:Discourse、Wordpress、SoundCloud、Facebook、Twitter、Vimeo などです。YT のみが URL として表示されます。
riking
(Kane York)
32
一つ試してみたいのは、サーバーを介してプロキシ経由で Google にログインし、YouTube サイトにアクセスして、何か「興味深い」エラーメッセージが表示されるかどうかを確認することです。
新規投稿の編集画面で onebox が機能しない場合、過去の投稿を再構築しても意味がありません。
まず、新規投稿で onebox が機能するようにする必要があります(少なくともプレビューパネルで正しく表示されるようにしてください)。
なお、UI からの HTML 再構築は rebake と同じです。
Iceman
(Iceman)
34
さて、一週間の悔い改めの末、少し前進しましたが、結局は行き詰まりました。
-
前述の詳細な事柄はすべて現在も有効です。
-
徹底的なデバッグを行った結果、問題の原因は以下の通りであることが判明しました。新しいドロプレットを作成する際、元のドロプレットでは当時できなかったいくつかの更新を行いました。その一つが IPv6 の設定です。どうやら、Google は何らかの宇宙的な理由で Digital Ocean の IPv6 アドレス範囲のほとんどをブロックしているようです。今後の参考までにアドバイスします:DO(Digital Ocean)で Discourse をインストールする際は、IPv6 を設定しないでください。後から IPv6 を削除することはできず、結局はドロプレット自体を変更しなければならないからです。
-
その修正後、すべてが期待通りに動作しました。しかし、通常の成長と Alphabet による最近の施策の影響で、再びゼロからやり直しです。なぜなら、今では このエラーが発生するようになり、Discourse が onebox(リンクプレビュー)の処理を「停止」する方法がわからないからです(YouTube ドメインをブラックリストに追加しようとしましたが、効果はありませんでした)。リンクした投稿によると、「1 時間後に解消されるはず」ですが、リベイク(再レンダリング)を一時停止することはできません。あるいは、できるのでしょうか?すべきでしょうか?他の選択肢はサーバー側の設定変更に依存しますが、それは… より多くの IP アドレスを追加することでしょうか?Onebox の呼び出しで「X-Forwarded-For」を強制することでしょうか?
-
さらに、ボーナス質問:なぜ Discourse が YouTube への呼び出しの「負荷」を背負うのでしょうか?つまり、このエラーは、すべての呼び出しを行っているサーバーの IP がフラグ付けされていることを示唆しています(はい、onebox の URL 展開が原因です)。しかし、なぜそれがページを読み込むユーザーの責任にならないのでしょうか?パフォーマンス上の理由でしょうか?
neounix
(Dark Matter)
35
[quote=“Iceman, 投稿:34, トピック:47718”]
Discourse が onebox を処理するのを「停止」する方法は知らないようです(YT ドメインをブラックリストに追加しようとしましたが、成功しませんでした)。[/quote]
@Iceman さん、こんにちは。
応急処置として、あなたのためにこの(優雅ではない)CSS をテストしました。onebox の処理を停止するのに効果があるようです。「ハエをハンマーで叩く」ようなアプローチですが、より良い解決策が見つかるまで、オン/オフ(追加と削除)で切り替えてみてください。試してみてください:
.onebox-body{
display:none;
}
これが役立つことを願っています。
注:
いくつかの onebox リンクでこれをテストしましたが、onebox は消え、リンクは残りました。ただし、詳細にはテストしていません。ご了承ください。
現在の処理を停止してください。再構築(rebake)を実行しているトリガーは何ですか?バックグラウンドジョブですか?もしそうなら、rebake old posts count 設定をゼロに下げてください。
その後、正規表現に一致する特定の YouTube 投稿を遅延付きで再構築できます。
Iceman
(Iceman)
37
まず第一に、@neounix と @Overgrow の両方に感謝します。
これについて:
できるだけ早くテストします。私のテストをブロックしてくれさえすれば、喜んで試します 
@Overgrow の質問について:
最近(皆さんのおかげで)カスタムリベイクのやり方や、いくつかのクエリや「ダークマジック」をどう行うかを学びました。ただ、どのようにしてこれを把握したり、クエリを実行したりできるのでしょうか?
つまり、それは Ruby コンソールで確認するのでしょうか、それとも Sidekiq で何かをキルするのでしょうか…?
riking
(Kane York)
38
rebake old posts count は、さまざまな rake タスクでフラグが付けられた投稿を15 分ごとに何件処理するかを制御します。
Iceman
(Iceman)
39
@riking さん、こんにちは。
ご意見をありがとうございます。簡単な質問ですが、その設定はどのように変更すればよいでしょうか?Rails コンソールでしょうか?
Iceman
(Iceman)
41
神様、私がなんて馬鹿なんでしょう
@neounix さん、ありがとうございます!
でも、ゼロには設定できませんね。UI によると、値は 1 から 20 億の間でなければならないそうです。なので、1 に設定して、あなたのハックと組み合わせることにします。これで BAN が解除されるか確認できるはずです。
(他の選択肢は、新しい IP を使う、ロードバランサーを使う、あるいはすべてに X-Forwarded-For を強制的に適用するなど、はるかに重たいので、Discourse の仕組みを壊したくないんです
)
近々更新します!
neounix
(Dark Matter)
42
参考までに…0 に設定する必要がある場合は、直接データベースの UPDATE クエリ(または、私が詳しくは説明できない Rails)で設定できる可能性が高いです。
Iceman
(Iceman)
43
まあ、ダメでしたね。値を1のままにして、何も表示しないためのハックを入れても、5時間経ってもBANは解除されません。一番困るのは、もちろん彼らに連絡する方法がないので、解決策を推測するしかないことです。
根気強く待ってください。私の経験では、禁止が解除されるまで最大 2〜3 日かかる場合があります。その IP へのさらなるリクエストがないことを確認してください。
まだ再構築ジョブが実行されているか確認できます。ヒントはコードにあります(この行は、rebake old posts count設定で制限された背景で再構築が必要な投稿を選択します):
以下の投稿を探してください:
WHERE (((baked_version IS NULL) OR (baked_version < 2)) AND (deleted_at IS NULL))