Мы используем плагин rss-polling для импорта записей из десятков лент. Время от времени некоторые ленты просто исчезают из списка. Мы не знаем, при каких условиях это происходит, не понимаем, как именно, и не можем найти никаких логов подобных действий. Мы также не обнаружили какой-либо закономерности. Они просто исчезают, и нам приходится заново создавать их записи (когда мы замечаем их отсутствие, что при таком количестве лент не всегда очевидно).
Существует ли в коде функция, которая удаляет RSS-ленту при определённых условиях? Есть ли лог, который фиксирует такие случаи?
Единственное, что мы делаем с RSS-лентами, — это вручную создаём новые на странице /admin/plugins/rss_polling. Ничего больше.
Я заметил, что порядок отображения RSS-лент на этой странице периодически меняется, что уже странно. Это затрудняет отладку проблем, так как теряется хронологический порядок создания лент, а новое сортирование, похоже, не следует ни алфавитному, ни числовому порядку.
Мы не знаем, как часто возникает эта проблема, поскольку не можем сразу её обнаружить. В лучшем случае мы можем лишь ждать, пока владелец ленты сообщит, что новые записи не появляются, или сами заметим, что, например, еженедельный подкаст давно не обновлялся на форуме.
У меня складывается впечатление, что эта проблема может быть связана с ситуациями, когда загрузка процессора приближается к 100% или когда какой-либо другой ресурс сервера достигает максимальной нагрузки. Даже если планировщик хорошо справляется с опросом только пяти лент одновременно, в аналитике хостинга видно, что при обновлении RSS-лент загрузка процессора практически достигает 100%.
Возможно, именно поэтому форумы с всего парой лент не замечают этой проблемы, но если добавить множество лент, что-то может время от времени ломаться, несмотря на работу планировщика?
В любом случае, интересно, почему Discourse вообще должен удалять RSS-каналы, да ещё и молча. Если RSS-канал по какой-то причине проблемный, его можно просто пропустить в этот раз и записать проблему в лог. С этого момента возможны два варианта:
Проблема была разовой, и следующие запуски планировщика пройдут без сбоев. Запись в логе будет забыта.
Проблема сохраняется, каждый пропуск оставляет запись в журнале ошибок, и когда кто-то обнаруживает проблему, администраторы могут проверить журнал ошибок и найти детали.
В идеале администраторы должны получать какое-то уведомление, но я понимаю, если это усложнит потенциальное решение. Пропуск вместо удаления + запись в журнал ошибок уже станет большим улучшением.
И чтобы пояснить, какое влияние эта проблема оказывает на наш проект. У нас есть портал независимых подкастов; авторы подкастов связываются с нами для включения в агрегацию, мы создаем канал (подкатегорию), куда импортируются их программы, и где слушатели могут ставить лайки и оставлять комментарии… Когда они узнают, что мы прекратили их агрегацию, и нам приходится отвечать, что somehow их канал был удалён, это создаёт очень плохое впечатление о нашем проекте и о платформе Discourse.
Начнём с этого исправления пока. Я не утверждаю, что это причина загадочного удаления лент, но добавление хотя бы диалогового окна подтверждения перед фактическим удалением ленты — это уже шаг вперёд.
Позже, когда у меня появится больше времени, я займусь дальнейшими улучшениями. Я хочу добавить полноценный интерфейс для редактирования и сохранения отдельных лент, а не обновлять/сохранять все сразу при каждом изменении.
@icaria36, если вы обновите свой плагин, вы получите это последнее изменение. Я снова напишу, когда будут готовы новые улучшения.
Спасибо за исправление! Я сразу обновился до новой версии и добавил недостающие RSS-каналы (около 20!), но сегодня проверил и… каналы снова бесшумно исчезли. Не знаю, когда, не знаю, как, до сих пор не знаю, какие именно, но отсутствует около дюжины. Никакого диалога с запросом о каналах перед их удалением я не видел, да и вообще ничего. Кроме того, я добавил RSS-каналы снова, когда загрузка процессоров сервера была нормальной, чтобы избежать времени опроса RSS, просто исключив этот фактор из уравнения.
У меня складывается впечатление, что существует связь между тем, что список меняет порядок сортировки, и тем, что каналы исчезают. Что бы ни вызывало изменение сортировки, это может быть достаточно травмирующим, чтобы также привести к потерям. Полезный вопрос мог бы звучать так: почему список вообще меняет порядок сортировки? Исчезновение каналов при неизменной сортировке списка было бы столь же плохо, но это выглядело бы… более аккуратно.
Эту проблему утомительно исправлять на нашей стороне (выяснять, какие каналы отсутствуют, до того как их владельцы заметят и спросят, плюс снова добавлять записи каналов), но ещё утомительнее её обнаруживать, потому что единственный способ — проверять категорию за категорией, чтобы увидеть, каких каналов не хватает, — или хотя бы вручную подсчитывать количество каналов по сравнению с прошлым разом, когда мы считали.
Отличным помощником в отладке было бы отображение строки с общим количеством каналов в /admin/plugins/rss_polling, например, просто «N каналов». Или же можно было бы пронумеровать список.
Я значительно улучшил административный интерфейс благодаря последним изменениям, и это должно решить проблему загадочного исчезновения RSS-каналов.
Теперь используется отдельная логика для создания, обновления и удаления вместо попытки обновить все каналы при каждом изменении. Теперь всё должно работать гораздо лучше.
Большое спасибо за вашу оперативную реакцию! Сегодня вечером я обновлю систему, проверю, что все наши каналы включены, и отпишусь здесь, если возникнут какие-либо проблемы (хотя, надеюсь, их не будет).
Вау, это стало намного лучше! Каждый канал редактируется отдельно, с сохранением изменений по одному. Сохранение нового канала происходит мгновенно. Раньше, когда у вас было много каналов, добавление нового канала и нажатие кнопки «Сохранить» занимало несколько секунд, прежде чем обновлялся весь список. Теперь всё работает надёжно и стабильно. Большое спасибо!
Я подожду пару недель, чтобы убедиться, что ни один канал не потеряется.
Несколько предложений по улучшению интерфейса, на случай, если они окажутся полезными и будут уместны:
Знак «+» для добавления нового канала находится вверху, но новая строка добавляется внизу. Если список каналов длиннее экрана, пользователь нажимает «+» и не видит никаких изменений. Я хорошо знаком с этой страницей, но сначала подумал, что кнопка сломана. Затем я решил проверить конец списка и обнаружил там новую строку, ожидающую, как и раньше.
Размещение новой строки в начале списка, сразу под кнопкой «+», могло бы стать хорошей альтернативой. Если это поместит новый канал в начало списка, это тоже хорошо, особенно если он первым попадает в планировщик. Новые каналы с большей вероятностью принесут больше работы и потребуют проверки, чем уже устоявшиеся.
Есть несколько надписей «Настройки каналов» и «Настройки Discourse», которые кажутся просто висящими в воздухе. «Настройки каналов» кажется избыточным, поскольку список находится прямо ниже и сам по себе понятен. Предназначена ли надпись «Настройки Discourse» как ссылка на /admin/site_settings/category/plugins?filter=plugin%3Adiscourse-rss-polling? Или, возможно, они должны быть вкладками для двух разных подстраниц?
Одной из альтернатив могло бы стать просто их удаление.
Да, хороший момент. Я буду это иметь в виду. У нас есть новая тема на Creating consistent admin interfaces, и я думаю, что некоторые улучшения плагина rss-polling появятся благодаря ей. Скорее всего, мы создадим отдельный экран редактирования, как это делаем для других плагинов, вместо редактирования непосредственно в строке.
Да, спасибо, что обратили на это внимание. Я понимаю, как это может запутать. «Настройки ленты» — это метка для первых двух столбцов, указывающая, что эти столбцы влияют на RSS-ленту. Метка «Настройки Discourse» относится к последним трем столбцам, указывая, что при их изменении затрагиваются элементы в Discourse.
Прошла неделя, мы добавили несколько десятков RSS-каналов к уже имеющимся более чем ста, и список теперь абсолютно надёжен. Мы не обнаружили никаких проблем!