Youtube embeds missing

Привет, @Iceman

Да, я только что поискал в базе данных и не смог найти таблицу или поле, где хранится эта настройка (её не было в таблице site_settings).

Что касается вашего комментария:

… и бан всё ещё активен спустя 5 часов

У меня нет особых знаний о том, как Google управляет такими «банами», но я предполагаю, что после того, как их алгоритмы срабатывают и накладывают бан, Google может потребоваться гораздо больше времени, чтобы его снять (дни или даже недели).

Но, с другой стороны, у меня нет никаких практических знаний о том, как работает этот процесс блокировки, или даже о том, как он официально называется в Google.

А у вас есть?

Есть ли страница поддержки Google, где они обсуждают это? Как точно называется процесс блокировки, о котором вы говорите?

Действительно, нет страницы поддержки, где Google подробно объясняет, как работает их система блокировки для предотвращения DoS-атак или любая связанная с ней система.

После крови, пота и слёз, я думаю, проблема решена.

Однако я не особенно «горжусь» этим решением, но что поделать — это Google, они ни с кем не разговаривают и ничего не объясняют, так что… выводы:

  • Прежде всего, важный урок: не включайте IPv6 на DigitalOcean, если вы используете Discourse, так как их диапазон IPv6 заблокирован YouTube.

  • После исправления проблемы с IPv6, из-за растущего трафика (независимо от хостинга — я несколько раз менял провайдера, какое путешествие!), произошло следующее: YouTube начал блокировать по IP мою установку Discourse из-за большого количества загружаемых на сайт видеороликов и способа их загрузки через Discourse.

  • Чтобы проверить эту блокировку, нужно либо использовать свой сервер как прокси для машины с браузером, либо выполнить curl и найти следующую строку: «Извините за неудобства. Мы получаем большой объём запросов из вашей сети». (вот тема для справки)

  • Благодаря помощи от @riking, @neounix и @Overgrow я выполнил ряд команд (их можно прочитать выше), чтобы попытаться остановить, ограничить или изменить скорость рендеринга встраиваемых видео YouTube. Для большинства сайтов этого было бы достаточно, но у нас была дополнительная сложность: после миграции на несколько хостов требовалось заново обработать все предыдущие посты. Фактически, ограничение в одно видео в час вроде бы сначала решило проблему. Но, видимо, мое сообщество просто очень любит делиться видео, потому что это не продлилось долго.

  • Очевидно, что от YouTube никакой обратной связи или помощи нет, кроме нескольких тем на их форуме с описанием ошибки и комментариев вроде «да, у меня тоже эта проблема», но без решений.

  • Учитывая обстоятельства и помня логику рекламных роликов «Должен быть другой способ!», я выбрал подход «Рэмбо»: купил дополнительный IP-адрес. Затем настроил cron-задачу, которая каждые час меняет исходящий IP-адрес. Проблема решена.

Ожидается, что если сайт продолжит расти, а люди будут продолжать делиться любовью к YouTube, возможно, потребуется приобрести третий IP. Но пока я не найду правильный способ реализации «распределённого Discourse» в K8S или подобной среде, это лучшее, что можно сделать.

Не самое элегантное решение, я знаю.

Ещё раз спасибо за всю помощь (и в основном за терпение, потому что я знаю, что я очень нуб в связке Rails/Sidekiq/RubyConsole, но я стараюсь улучшаться, читая исходный код Discourse).

Спасибо!

Блестяще!

Это креативное, эффективное решение «мыслить нестандартно».

Поздравляю с тем, что вы решили свою задачу со стилем и изяществом!

Следуя советам и рекомендациям, несколько дней назад я настроил CDN CloudFront для нашего бакета S3 в AWS на нашем форуме Discourse.

Я добавил URL CDN S3 в панель управления, а затем выполнил команду ребейка для более чем 200 000 постов.

На тот момент я не придавал этому особого значения — всё работало как по маслу в течение следующих 12 часов или около того.

У нас много, очень много встроенных видео на Discourse. Мы — сообщество любителей дронов и БПЛА, и люди круглосуточно публикуют и делятся своими фото и видео. В постах нашего форума десятки тысяч видео с YouTube.

Взгляд задним числом? После добавления URL CDN мне, вероятно, стоило выполнить ребейк только для постов, соответствующих шаблону *.jpg или подобному :man_facepalming:t2: :cry:

В любом случае, что произошло?

YouTube заблокировал IP-адрес нашего сервера :pensive:

Мы больше не можем создавать превью (onebox) для ссылок на YouTube; наше сообщество видит сообщение:

429 Too Many Requests

:pensive:

(простой запрос через curl или wget непосредственно с сервера также возвращает ту же ошибку).

Очевидно, что блокировка произошла во время ребейка, так как половина существующих постов, в которых ранее работали видео, теперь не работают :sob:

Я предполагаю, что эта блокировка постоянна, но, как вы знаете, невозможно найти кого-либо в YouTube, чтобы связаться с ним и попросить прощения.

На случай, если блокировка действительно постоянна, вопрос к @Iceman: не могли бы вы поделиться деталями того, как вы получили второй IP-адрес в DigitalOcean, и какие изменения внесли, чтобы исходящий трафик шёл через этот IP, а входящий оставался на существующем?

И вопрос ко всем: известно ли кому-нибудь, является ли эта блокировка лишь временной? :crossed_fingers:t2 И/или есть ли что-то, что я могу сделать, чтобы исправить мои теперь сильно повреждённые посты с YouTube?

Для сообщества, heavily ориентированного на медиа, это для нас настоящая катастрофа.

Скорее всего, это не навсегда; со временем, вероятно, пройдёт.

Если кто-то ищет аналогичное изменение, можно использовать Remap вместо пересборки. Это занимает почти мгновенно и не требует запросов ни к каким внешним ресурсам.

Извините за поздний ответ.

Я не смогу помочь вам с Digital Ocean — я ушел от них, когда их поддержка IPv6 была недостаточной.

Я постоянно добавляю всё больше и больше IP-адресов в «коммутатор», который выполняет исходящие запросы к YouTube, переключаясь между ними, чтобы избежать блокировки. Но в итоге они всё равно попадают под бан, и это тупик. Если вы «заблокированы» и этот IP продолжает отправлять запросы, он продолжает блокироваться. Чтобы YouTube «разблокировал» вас, нужно находиться без запросов от 1 до 8 часов. Чем больше у вас пользователей и чем больше видео YouTube они публикуют, тем хуже ситуация.

Благодаря последнему обновлению oneboxes стало проще заметить проблему (поскольку теперь вы видите ошибку 429 прямо в Discourse, а не ищете её, потому что видео отображаются неправильно). Однако, исходя из моего ограниченного понимания, я задаюсь вопросом: есть ли более эффективный способ встраивания видео с YouTube? Ведь когда видео воспроизводится, запрос, кажется, исходит от IP-адреса клиента, но когда видео отображается, запрос отправляет ваш сайт для каждого видео.

Спасибо @Iceman :+1:t2:

Это действительно полезная информация.

В пятницу я установил плагин Onebox Assistant и направил все onebox-запросы через прокси embed.rocks.

Сегодня на консоли сервера я попробовал случайный wget видео с YouTube.

И действительно, нас разблокировали!

Сегодня после обеда Onebox Assistant снова отключён, и мы получаем контент напрямую — пока никаких проблем.

Если бы я этого не сделал, вы правы: нас бы никогда не разблокировали, потому что мы обращались бы к YouTube каждый час или около того, так как люди постоянно публикуют новые видео :grimacing:

Ещё раз спасибо :smiley:

Спасибо за дополнительную информацию, @Iceman и @Richie! Этот вопрос часто поднимается в последнее время, поэтому любые уточнения о том, как YouTube применяет ограничение скорости запросов, крайне полезны.

Мы также хотим заверить пользователей, что эти «блокировки» автоматичны в обоих направлениях: если вы проявите терпение и уменьшите количество запросов к YouTube с вашего сайта, вас снимут со списка непослушных Санты в течение нескольких дней. :santa_claus::page_with_curl:

Я использовал вариант этого подхода для деликатной обработки большого количества постов. Рекомендация с низким риском и огромной экономией времени, спасибо @riking!

К сведению, я использовал это для отслеживания прогресса:

Post.where(baked_version: nil).count