Algolia:initialize не работает (rails aborted - не знаю, как создать задачу)

Здравствуйте,

Во-первых, это копия моего поста на официальном форуме Discourse для Algolia. Как сообщил мне поддержка Discourse, я могу теперь опубликовать его здесь, поэтому это копия сообщения.

Я хотел бы настроить наш форум Discourse с интеграцией Algolia, но у меня не получается так, как описано на GitHub. У меня установлена последняя версия: 3.1.0.beta1.

Для первоначальной инициализации я зашёл в контейнер с Discourse через Docker:

./launcher enter app

После этого я пробовал различные команды (bundle exec rails или просто rails, а также rake), но все они приводили к следующему:

root@rbx-communtity-service-app:/var/www/discourse# LOAD_PLUGINS=1 rails algolia:initialize
rails aborted!
Не удалось найти задачу ‘algolia:initialize’ (см. список доступных задач через rails --tasks)
Возможно, вы имели в виду? algolia:reindex

Когда я запускаю просто algolia:reindex, получаю следующее:

root@rbx-communtity-service-app:/var/www/discourse# LOAD_PLUGINS=1 rake algolia:reindex
Очистка пользователей из Algolia
Отправка пользователей в Algolia
..
Успешно отправлено xxx пользователей в Algolia
Очистка тегов из Algolia
Отправка тегов в Algolia
..
Успешно отправлено xxx тегов в Algolia
Очистка постов из Algolia
Отправка постов в Algolia
rake aborted!
NoMethodError: undefined method `id' for nil:NilClass
/var/www/discourse/plugins/discourse-algolia/lib/discourse_algolia/post_indexer.rb:66:in `to_object'
/var/www/discourse/plugins/discourse-algolia/lib/discourse_algolia/indexer.rb:23:in `block in process!'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:71:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:71:in `block in find_each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:138:in `block in find_in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:245:in `block in in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:229:in `loop'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:229:in `in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:137:in `find_in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:70:in `find_each'
/var/www/discourse/plugins/discourse-algolia/lib/discourse_algolia/indexer.rb:21:in `process!'
/var/www/discourse/plugins/discourse-algolia/lib/tasks/discourse_algolia.rake:36:in `block in algolia_reindex'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:245:in `block in in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:229:in `loop'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/relation/batches.rb:229:in `in_batches'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activerecord-7.0.3.1/lib/active_record/querying.rb:22:in `in_batches'
/var/www/discourse/plugins/discourse-algolia/lib/tasks/discourse_algolia.rake:33:in `algolia_reindex'
/var/www/discourse/plugins/discourse-algolia/lib/tasks/discourse_algolia.rake:7:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/cli/exec.rb:58:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/cli/exec.rb:58:in `kernel_load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/cli/exec.rb:23:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/cli.rb:491:in `exec'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/cli.rb:34:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/cli.rb:28:in `start'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/exe/bundle:45:in `block in <top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/bundler-2.4.1/exe/bundle:33:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => algolia:reindex
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)

Есть ли у кого-нибудь идеи, в чём может быть проблема?

Заранее спасибо!
М. Андерсон

Я установил это на свой тестовый сайт, чтобы проверить, и тоже заметил нечто подобное. Давайте посмотрим, что я смогу выяснить. :+1:

Случайно вы не устанавливали настройку сайта algolia_discourse_username?

Установлено значение «система»

Команда algolia:initialize больше не существует. См. FEATURE: Update to latest algolia gem (#33) · discourse/discourse-algolia@9a1f08f · GitHub

Файл README.md требует обновления.

README обновлён :+1:

Проблема с реиндексацией всё ещё сохраняется. Я выполнил полное обновление Discourse, включая Algolia. Также я пока не нашёл изменений в коде внутри плагина Algolia. Планируется ли работа над этим?

На данный момент изменена только документация README, но функция всё ещё не работает так, как я изначально описал.

Если потребуется, я могу отправить свежие логи из консоли.

Спасибо,
М. Андерсон

Сегодня ранее было исправлено баговое сообщение, связанное с проблемой переиндексации и подсчёта тем:

Не исключено, что это исправление могло решить и вашу проблему?

К сожалению, нет :frowning: Это исправление уже есть в моей версии Discourse. Та же проблема, что и раньше.

Отправка постов в Algolia
rake aborted!
NoMethodError: undefined method `id’ for nil:NilClass

    id: post.topic.id,
                  ^^^

/var/www/discourse/plugins/discourse-algolia/lib/discourse_algolia/post_indexer.rb:66:in to_object' /var/www/discourse/plugins/discourse-algolia/lib/discourse_algolia/indexer.rb:23:in block in process!’
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:71:in each' /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:71:in block in find_each’
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:138:in block in find_in_batches' /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:245:in block in in_batches’
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:229:in loop' /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:229:in in_batches’
/var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:137:in find_in_batches' /var/www/discourse/vendor/bundle/ruby/3.1.0/gems/activerecord-7.0.4.1/lib/active_record/relation/batches.rb:70:in find_each’

Я слишком оптимистично надеялся на «магическое исправление» :slightly_frowning_face:

Я снова попробовал на своём тестовом сайте и столкнулся с той же проблемой. Однако мне удалось найти дополнительную информацию. :partying_face: Похоже, у нас обоих есть проблема: как минимум один «осиротевший» пост без идентификатора темы, что вызывает сбой в задаче rake. Рекомендация — найти такие посты и удалить их, после чего задача rake reindex выполнится без проблем.

Я ещё не применял этот подход для поиска проблемного поста (постов), поэтому у меня пока нет пошаговой инструкции, но хотел заранее предупредить вас, на случай если вы захотите изучить этот вопрос до того, как я до него доберусь. :+1:

Я прямо сейчас отлаживаю это.

Вы изменили настройку сайта algolia_discourse_username по умолчанию? Если да, пожалуйста, убедитесь, что вы используете пользователя без прав администратора.

Я снова попробовал это сделать… :slight_smile: И могу подтвердить, что удаление ‘system’ из настройки algolia_discourse_username и запуск rake algolia:reindex с тестовым пользователем вместо него прошло без ошибок. :+1:

Мне стыдно, что я не заметил в инструкции следующую часть:

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

Я лишь сопоставил свои настройки с этой инструкцией:

После включения и заполнения всех настроек конфигурация плагина должна выглядеть следующим образом:

Лично я (хотя, возможно, я предвзят :slight_smile:) считаю, что эти инструкции можно было бы сделать немного понятнее. :slight_smile: Я бы предложил добавить раздел «Создайте пользователя Algolia для Discourse» в процесс настройки.

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

Это ещё более отличная идея. :slight_smile:

Привет,
спасибо, теперь всё работает :slight_smile: Мои три индекса созданы и отправлены в Algolia!