Вы не ошибаетесь. Вы просто пытаетесь решить проблему, возможно, расстроены тем, что ваши вставки YouTube не работают…
Когда вы запускаете это:
# time rake posts:rebake_match['youtube',string,100]
116 / 76598 (0.2%)-
Так как задержка установлена на 100, будет пересобран только один пост каждые 100 секунд. У вас почти 77 тысяч постов для пересборки (используя этот шаблон), так что это займет около 90 дней. Когда я использовал 100, это было лишь примером, а не рекомендацией, извините, если я вас запутал
Даже если вы измените задержку на 10 секунд, ваша пересборка займет около 9 дней.
С какой скоростью вы на самом деле хотите пересобирать свои “YouTube-посты”?
Так, это важная подсказка; и теперь мы знаем, что даже повторная обработка одного поста с помощью rake-задачи не решает вашу проблему (также подтверждено, что перестроение HTML через интерфейс не работает, как предлагал @Overgrow), что вы и пытались нам сказать ранее.
Спасибо за пошаговую диагностику.
Давайте я подумаю над этим некоторое время; а пока другие могут предложить идеи, теперь, когда проблема становится более понятной.
Опубликуйте здесь одну из ваших (не работающих) ссылок на YouTube (возможно, ту, куда вы добавили текст ‘icemanworkingonthisheadache’), и давайте подтвердим, что превью работает здесь (я также попробую на одном из моих тестовых сайтов).
Да, все остальные oneboxes работают как ожидалось: Discourse, WordPress, SoundCloud, Facebook, Twitter, Vimeo и т. д. Только YouTube отображается как URL.
Один из вариантов — попробовать войти в Google и зайти на сайт YouTube через прокси на вашем сервере, чтобы проверить, не появятся ли какие-нибудь «интересные» сообщения об ошибках.
Итак, после недели раскаяния я добился некоторого прогресса, но в итоге уперся в стену.
Все упомянутые выше детали по-прежнему актуальны.
После того как я сделал всё возможное для отладки, выяснилось, что проблема заключалась в следующем: при создании нового Droplet я воспользовался возможностью обновить несколько вещей, которые не мог сделать ранее с оригинальным Droplet. Одна из них — IPv6. Оказалось, что диапазоны IPv6 от Digital Ocean в основном заблокированы Google по каким-то космическим причинам. Так что совет на будущее: если вы настраиваете установку Discourse на DO, не включайте IPv6, потому что удалить его позже нельзя — вам придётся менять Droplet.
После исправления этой проблемы всё заработало как положено. Однако из-за естественного роста (и некоторых недавних шагов Alphabet) я снова вернулся к нулю, потому что теперь получаю эту ошибку, и я не знаю, как «остановить» Discourse от обработки onebox (я даже пробовал добавить домен YT в чёрный список, но безрезультатно). Это связано с тем, что согласно посту, на который я ссылался, «ошибка должна исчезнуть через час», но я не могу заморозить ребейки… или могу? Стоит ли это делать? Другие варианты предполагают изменения на стороне сервера, но это означало бы… добавление новых IP-адресов? Принудительную установку заголовка «X-Forwarded-For» для вызовов Onebox?
Также дополнительный вопрос: почему Discourse «берёт на себя нагрузку» вызовов к YT? Я имею в виду, что эта ошибка предполагает, что IP-адрес сервера помечен как источник всех запросов (да, это из-за развёртывания onebox), но… почему это не ложится на пользователя, открывающего страницу? Из-за производительности?
В качестве временного решения я протестировал этот (неэлегантный) CSS (для вас), и он, похоже, работает и останавливает обработку onebox. Это своего рода подход «убить муху кувалдой», который вы можете включать и выключать (добавлять и удалять), пока не придумаете что-то лучшее. Попробуйте и посмотрите:
.onebox-body{
display:none;
}
Надеюсь, это поможет.
Примечание:
Я протестировал это на нескольких ссылках onebox, и onebox(ы) исчезли, а ссылка осталась; но не проводил детальное тестирование, извините.
Просто остановите текущую обработку. Вы знаете, что вызвало перезапись, которая выполняется? Это фоновая задача? Если да, то просто установите параметр «Количество старых постов для перезаписи» в ноль.
Затем вы можете использовать перезапись выбранных постов с YouTube (соответствующих регулярному выражению) с задержками..
Недавно я узнал (спасибо вам, ребята), как делать кастомную пересборку, выполнять некоторые запросы и применять «тёмную магию». Однако могу ли я спросить, как узнать или запросить следующее:
То есть… это делается через консоль Ruby или путём остановки чего-то в Sidekiq…?
Боже, как же я чувствую себя глупо Спасибо, @neounix!
Однако я не могу установить значение в ноль. Интерфейс говорит, что значение должно быть в диапазоне от 1 до 2 000 000 000. Так что, полагаю, я установлю его в 1 и объединю с вашим хаком… это должно позволить мне проверить, снимется ли бан.
(Потому что другие варианты гораздо сложнее: новые IP-адреса, балансировщики нагрузки или прямое принуждение X-Forwarded-For для всего, а я не хочу сломать работу Discourse )
К сведению… Если вам нужно установить значение равным нулю, вы, скорее всего, сможете сделать это с помощью прямого запроса UPDATE к базе данных (или через Rails, но я не могу говорить об этом компетентно).
Что ж, не повезло. Оставил значение 1 и добавил хак, чтобы ничего не отображалось, но бан всё ещё висит уже 5 часов. Самое худшее? Очевидно, что связаться с ними невозможно, поэтому я просто гадаю, как это решить.
Вам нужно запастись терпением. По моему опыту, снятие блокировки может занять до 2–3 дней. Просто убедитесь, что больше никаких запросов с этого IP-адреса не поступает.
Вы можете проверить, остались ли задачи по повторной сборке (rebake) для выполнения. Подсказка содержится в коде (эта строка выбирает сообщения, требующие повторной сборки в фоновом режиме, с ограничением, установленным параметром rebake old posts count):
Вам нужно искать сообщения, соответствующие следующему условию:
WHERE (((baked_version IS NULL) OR (baked_version < 2)) AND (deleted_at IS NULL))