Algolia: initialize 不工作 (rails 中断 - 不知道如何构建任务)

您好,

首先,这是我发布到官方 algolia-discourse 论坛的帖子副本。根据 Discourse-Support 的指示,我现在可以将其发布在这里,因此这是一个复制的消息。

我想设置我们的 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!
Don’t know how to build task ‘algolia:initialize’ (See the list of available tasks with rails --tasks)
Did you mean? algolia:reindex

当我只运行 algolia:reindex 时,我得到以下结果:

root@rbx-communtity-service-app:/var/www/discourse# LOAD_PLUGINS=1 rake algolia:reindex
Clearing users from Algolia
Pushing users to Algolia
..
Successfully pushed xxx users to Algolia
Clearing tags from Algolia
Pushing tags to Algolia
..
Successfully pushed xxx tags to Algolia
Clearing posts from Algolia
Pushing posts to 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
(See full trace by running task with --trace)

有什么想法可能是什么问题吗?

提前感谢!
M.Anderson

我已将其安装在我的测试站点上进行试运行,我也看到了类似的情况。让我看看我能找到什么。:+1:

2 个赞

你是否设置了 algolia_discourse_username 站点设置?

3 个赞

它设置为“系统”

1 个赞

algolia:initialize 不再存在。请参阅 FEATURE: Update to latest algolia gem (#33) · discourse/discourse-algolia@9a1f08f · GitHub

README.md 需要更新。

2 个赞

README 已更新 :+1:

2 个赞

重新索引的问题仍然存在。我对 discourse 进行了完整升级,包括 algolia。此外,我还没有在 algolia-plugin 中找到任何代码更改。是否有计划对此进行处理?

目前,只有自述文件已更改,但功能仍未按我最初编写的那样工作。

如果需要,我可以从控制台发送新的日志。

谢谢,
M.Anderson

今天早些时候对重新索引和主题计数问题进行了错误修复:

碰巧的是,这是否也解决了您的问题?

Unfortunately no :frowning: This fix is already inside my discourse-version. Same issue as before.

Pushing posts to 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’

1 个赞

我曾过于乐观地希望它能“神奇地修复” :slightly_frowning_face:

我再次在我的测试站点上尝试了一下,也遇到了同样的问题。不过,我设法找到了一些更多信息。:partying_face: 显然,我们都遇到了一个问题,即至少有一个帖子是孤立的,缺少主题 ID,这导致 rake 任务出错。建议是找到并删除这些孤立帖子,然后 rake reindex 就可以顺利运行了。

我还没有实践过查找问题帖子(们),所以还没有详细的步骤,但我想在你之前给你提个醒,以防你想在我之前研究一下这个问题。:+1:

2 个赞

我正在调试它。

您是否更改了默认的 algolia_discourse_username 站点设置?如果是,请确保您使用的是非管理员用户。

4 个赞

我再试了一次…… :slight_smile: 我可以确认,删除 algolia discourse username 设置中的“system”并使用一个虚拟用户运行 rake algolia:reindex 可以成功运行。:+1:

我惭愧地没有注意到说明中的这一部分:

建议您创建一个只能看到您认为公开的内容的虚拟独立用户,并将其值更改为该用户的用户名。

并且只根据此说明匹配了我的设置:

一旦所有设置都打开并填充完毕,插件配置应如下所示:

个人而言(我可能带有偏见 :slight_smile:),我认为我们可以让这些说明更清晰一些。:slight_smile: 我主张在配置流程中添加一个“创建您的 algolia discourse 用户”部分。

3 个赞

实际上,在最新的 PR 中,我已删除该选项,因为它可能存在风险。当使用具有管理员访问权限的用户时,它可能会在搜索中显示受限帖子。

3 个赞

这真是个更好的主意。 :slight_smile:

3 个赞

您好,
谢谢,现在可以正常工作了 :slight_smile: 我的三个索引已创建并发送到 Algolia!

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.