Youtube embeds missing

Привет, @Iceman

Вы не ошибаетесь. Вы просто пытаетесь решить проблему, возможно, расстроены тем, что ваши вставки YouTube не работают…

Когда вы запускаете это:

# time rake posts:rebake_match['youtube',string,100]
           116 / 76598 (0.2%)- 

Так как задержка установлена на 100, будет пересобран только один пост каждые 100 секунд. У вас почти 77 тысяч постов для пересборки (используя этот шаблон), так что это займет около 90 дней. Когда я использовал 100, это было лишь примером, а не рекомендацией, извините, если я вас запутал :slight_smile:

Даже если вы измените задержку на 10 секунд, ваша пересборка займет около 9 дней.

С какой скоростью вы на самом деле хотите пересобирать свои “YouTube-посты”?

Вы можете легко выполнить «Перестроить HTML» как администратор, нажав кнопку под каждым сообщением.

Спасибо @neounix

Попробовал на одном посте с ссылкой на YouTube:

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

Затем проверил этот пост, но там по-прежнему отображается только ссылка, без onebox. (Проверял без кэша, без cookies, даже с другого ПК :stuck_out_tongue: )

Спасибо @Overgrow.

Также пробовал это и до, и после команды rebake (приведённой выше) на том же и на другом посте, но без успеха.

Привет, @iceman,

Так, это важная подсказка; и теперь мы знаем, что даже повторная обработка одного поста с помощью rake-задачи не решает вашу проблему (также подтверждено, что перестроение HTML через интерфейс не работает, как предлагал @Overgrow), что вы и пытались нам сказать ранее.

Спасибо за пошаговую диагностику.

Давайте я подумаю над этим некоторое время; а пока другие могут предложить идеи, теперь, когда проблема становится более понятной.


Редактирование:


@Iceman

Опубликуйте здесь одну из ваших (не работающих) ссылок на YouTube (возможно, ту, куда вы добавили текст ‘icemanworkingonthisheadache’), и давайте подтвердим, что превью работает здесь (я также попробую на одном из моих тестовых сайтов).

Конечно, @neounix

Это происходит с любым видео на YouTube, но для последовательности вот два примера, которые я специально проверил:


Редакция: Да, они работают здесь.

Кстати, у меня на установке они не отображаются в панели предпросмотра.

Но все остальные «не YT» одностраничные блоки на вашем сайте отображаются корректно, @Iceman?

Привет, @neounix

Да, все остальные oneboxes работают как ожидалось: Discourse, WordPress, SoundCloud, Facebook, Twitter, Vimeo и т. д. Только YouTube отображается как URL.

Один из вариантов — попробовать войти в Google и зайти на сайт YouTube через прокси на вашем сервере, чтобы проверить, не появятся ли какие-нибудь «интересные» сообщения об ошибках.

Если у вас не работает onebox в редакторе для новых сообщений, то нет смысла переделывать старые посты.

Сначала нужно обеспечить работу onebox для новых сообщений (как минимум, чтобы он корректно отображался в панели предпросмотра).

Кстати… пересборка HTML из интерфейса = переделка (rebake).

Итак, после недели раскаяния я добился некоторого прогресса, но в итоге уперся в стену.

  • Все упомянутые выше детали по-прежнему актуальны.

  • После того как я сделал всё возможное для отладки, выяснилось, что проблема заключалась в следующем: при создании нового Droplet я воспользовался возможностью обновить несколько вещей, которые не мог сделать ранее с оригинальным Droplet. Одна из них — IPv6. Оказалось, что диапазоны IPv6 от Digital Ocean в основном заблокированы Google по каким-то космическим причинам. Так что совет на будущее: если вы настраиваете установку Discourse на DO, не включайте IPv6, потому что удалить его позже нельзя — вам придётся менять Droplet.

  • После исправления этой проблемы всё заработало как положено. Однако из-за естественного роста (и некоторых недавних шагов Alphabet) я снова вернулся к нулю, потому что теперь получаю эту ошибку, и я не знаю, как «остановить» Discourse от обработки onebox (я даже пробовал добавить домен YT в чёрный список, но безрезультатно). Это связано с тем, что согласно посту, на который я ссылался, «ошибка должна исчезнуть через час», но я не могу заморозить ребейки… или могу? Стоит ли это делать? Другие варианты предполагают изменения на стороне сервера, но это означало бы… добавление новых IP-адресов? Принудительную установку заголовка «X-Forwarded-For» для вызовов Onebox?

  • Также дополнительный вопрос: почему Discourse «берёт на себя нагрузку» вызовов к YT? Я имею в виду, что эта ошибка предполагает, что IP-адрес сервера помечен как источник всех запросов (да, это из-за развёртывания onebox), но… почему это не ложится на пользователя, открывающего страницу? Из-за производительности?

Привет, @Iceman

В качестве временного решения я протестировал этот (неэлегантный) CSS (для вас), и он, похоже, работает и останавливает обработку onebox. Это своего рода подход «убить муху кувалдой», который вы можете включать и выключать (добавлять и удалять), пока не придумаете что-то лучшее. Попробуйте и посмотрите:

.onebox-body{
    display:none;
}

Надеюсь, это поможет.

Примечание:

Я протестировал это на нескольких ссылках onebox, и onebox(ы) исчезли, а ссылка осталась; но не проводил детальное тестирование, извините.

Просто остановите текущую обработку. Вы знаете, что вызвало перезапись, которая выполняется? Это фоновая задача? Если да, то просто установите параметр «Количество старых постов для перезаписи» в ноль.

Затем вы можете использовать перезапись выбранных постов с YouTube (соответствующих регулярному выражению) с задержками..

Прежде всего, спасибо вам обоим, @neounix и @Overgrow.

Касательно этого:

Протестирую как можно скорее. Пока это блокирует процесс для моих тестов, я более чем счастлив :smiley:

Касательно вопроса от @Overgrow:

Недавно я узнал (спасибо вам, ребята), как делать кастомную пересборку, выполнять некоторые запросы и применять «тёмную магию». Однако могу ли я спросить, как узнать или запросить следующее:

То есть… это делается через консоль Ruby или путём остановки чего-то в Sidekiq…?

rebake old posts count определяет, сколько сообщений, помеченных различными задачами rake, обрабатывается каждые 15 минут.

Привет @riking,

Спасибо за ваш вклад. Только один быстрый вопрос… как можно изменить эту настройку? Через консоль Rails?

Привет, @Iceman

Это настройка в административном интерфейсе

Боже, как же я чувствую себя глупо :sweat_smile: Спасибо, @neounix!

Однако я не могу установить значение в ноль. Интерфейс говорит, что значение должно быть в диапазоне от 1 до 2 000 000 000. Так что, полагаю, я установлю его в 1 и объединю с вашим хаком… это должно позволить мне проверить, снимется ли бан.

(Потому что другие варианты гораздо сложнее: новые IP-адреса, балансировщики нагрузки или прямое принуждение X-Forwarded-For для всего, а я не хочу сломать работу Discourse :sweat:)

Скоро обновлю информацию!

К сведению… Если вам нужно установить значение равным нулю, вы, скорее всего, сможете сделать это с помощью прямого запроса UPDATE к базе данных (или через Rails, но я не могу говорить об этом компетентно).

Что ж, не повезло. Оставил значение 1 и добавил хак, чтобы ничего не отображалось, но бан всё ещё висит уже 5 часов. Самое худшее? Очевидно, что связаться с ними невозможно, поэтому я просто гадаю, как это решить. :sweat:

Вам нужно запастись терпением. По моему опыту, снятие блокировки может занять до 2–3 дней. Просто убедитесь, что больше никаких запросов с этого IP-адреса не поступает.

Вы можете проверить, остались ли задачи по повторной сборке (rebake) для выполнения. Подсказка содержится в коде (эта строка выбирает сообщения, требующие повторной сборки в фоновом режиме, с ограничением, установленным параметром rebake old posts count):

Вам нужно искать сообщения, соответствующие следующему условию:

WHERE (((baked_version IS NULL) OR (baked_version < 2)) AND (deleted_at IS NULL))