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»?\n\n [1] pry(main)\u003e posts = Post.where("raw like ‘%youtube%’").count\n =\u003e 5237\n\n:thinking:

Я тоже с этим сталкивался. Это временная блокировка IP-адреса (на 1 час, насколько я знаю), и в этот период все однобоксы YouTube для пересобранных постов не работают.

Возможно, стоит внедрить механизм, который ограничивал бы количество запросов к YouTube до определённого значения в час при пересборке?

Недавно после серии изменений и обновлений моей установки Discourse осталось решить только две проблемы. Первая — невозможность пересоздать контейнер с данными, я пытаюсь разобраться, но вторая заключается в том, что все onebox работают, кроме ссылок на YouTube.

Изнутри сервера и контейнера я могу выполнить CURL-запрос к YouTube. Как мне убедиться, что проблема именно во временной блокировке IP?

Редактирование: Подтверждаю, что ни пересоздание (App), ни повторная обработка (Rebake) не влияют на эту проблему.

Редактирование 2: При поиске я увидел, что @jomaxro прокомментировал это, что такие сервисы, как CloudFlare, могут влиять на работу Onebox… может ли CDN влиять только на один конкретный Onebox? Попробовал включить режим разработки, но изменений нет.

Редактирование 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

Редактирование: Спустя некоторое время я могу подтвердить, что второе значение остаётся неизменным (одинаковое), тогда как первое продолжает расти.

Для совпадения строки в посте использование регулярных выражений не обязательно. Простой поиск по строке отлично справится с совпадением youtube (например). В этом примере каждый пост, содержащий строку youtube, будет пересобран, один раз каждые 100 секунд (очень медленно…)

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

В данный момент обработано 209 из 762 всего…

Какие показатели у твоей задачи по переработке?

Прошу прощения за неточную информацию!

Я имел в виду, что запустил это на небольшой выборке, а затем перезапустил, но количество не изменилось.

Например: я выполнил команду, у меня было 76 000 постов, система обработала 200, затем остановилась, запустила снова, и новое число составило 76 200 (да, возможно, мои пользователи добавили 400 постов с YouTube, но… я не знаю).

Сейчас я запускаю это снова, чтобы посмотреть, как всё пойдёт, но это займёт несколько дней :stuck_out_tongue: (76 500 записей…)

Так как у других эта проблема не возникает, я пытаюсь проанализировать свои переменные и, по сути:

  • Поменял машину (так что это может быть ограничение скорости от YouTube?)
  • Восстановил резервную копию Discourse на новой установке (это не должно быть связано, но на данном этапе я готов поверить в любую возможную причину)
  • Двухконтейнерная установка (думал, что проблема в перестроении данных, но благодаря этой информации от @Falco теперь я знаю, что это «нормально».)
  • Настроил CloudFlare поверх системы, следуя руководствам по CDN, которые есть здесь.

Извините за тупость :slight_smile: Вы имеете в виду, что вы запускаете эту задачу Rake?

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

Важно точно указать, что вы вводите и видите.

Какая именно задача Rake, какие параметры вы используете?

При запуске этой задачи Rake, какие первые несколько строк вывода появляются, когда задача начинает обработку?

Пожалуйста, предоставьте детали, скриншоты, скопируйте и вставьте данные из вашей командной строки и т. д.

Извините, @neounix, вы абсолютно правы.

Позвольте переформулировать:

Я выполнил эту команду:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string]
        76597 / 76594 (100.0%)-
    76597 постов обработано!

Тогда я подумал: «Ну конечно, нужно добавить таймер, иначе мы не сможем проверить «Теорию ограничения скорости»», поэтому попробовал вариант, который вы опубликовали:

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%)-

Это выполняется прямо сейчас. Так что мой аргумент заключался в том, что общее количество постов не уменьшилось при предыдущей пересборке. (Я могу ошибаться, и возможно, я действительно ошибаюсь в этой логике).