Algolia:initialize 작동 안 함 (rails 중단됨 - task 빌드 방법 모름)

안녕하세요,

우선, 이 글은 공식 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/relation/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:

혹시 algolia_discourse_username 사이트 설정을 해두셨나요?

"system"으로 설정되어 있습니다

algolia:initialize는 더 이상 존재하지 않습니다. FEATURE: Update to latest algolia gem (#33) · discourse/discourse-algolia@9a1f08f · GitHub 를 참고하세요.

README.md가 업데이트되어야 합니다.

README 업데이트 :+1:

재인덱싱(reindex) 관련 문제는 여전히 존재합니다. Algolia를 포함하여 Discourse 전체를 업그레이드했습니다. 또한 Algolia 플러그인 내에서 코드 변경 사항을 아직 찾지 못했습니다. 이 문제에 대해 작업할 계획이 있으신가요?

현재까지 변경된 것은 readme뿐이며, 제가 처음 작성했던 대로 기능이 여전히 작동하지 않습니다.

필요하시면 콘솔에서 새로 수집한 로그를 보내드릴 수 있습니다.

감사합니다.
M.Anderson

오늘早些时候, 재인덱싱 및 주제 수 관련 문제에 대한 버그 수정이 적용되었습니다:

혹시 이 수정으로 인해 사용자의 문제도 해결되었을 수 있을까요?

안타깝게도 아니네요 :frowning: 이 수정 사항은 이미 제 discourse 버전 안에 포함되어 있습니다. 이전과 동일한 문제입니다.

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’

마법처럼 고쳐지기를 지나치게 낙관적으로 기대하고 있었습니다. :slightly_frowning_face:

테스트 사이트에서 한 번 더 시도해 보았는데, 역시 같은 문제가 재발했습니다. 다만, 추가 정보를 몇 가지 알아냈습니다. :partying_face: 우리 둘 다 최소 하나의 고아(orphaned) 게시물이 존재하는데, 이 게시물에는 토픽 ID가 없어서 rake 작업이 제대로 수행되지 않는 문제인 것으로 밝혀졌습니다. 조언은 해당 게시물들을 찾아서 삭제한 후 rake 재인덱싱을 실행하면 원활하게 진행될 것이라는 것이었습니다.

아직 문제의 게시물을 찾기 위해 이 방법을 직접 적용해 보지는 않아서 단계별 가이드는 없지만, 제가 직접 시도해 보기 전에 이 문제를 먼저 탐구해 보고 싶으시다면 미리 알려드리고자 합니다. :+1:

지금 디버깅하고 있습니다.

기본 algolia_discourse_username 사이트 설정을 변경하셨나요? 변경하셨다면, 관리자 계정이 아닌 일반 사용자를 사용하고 있는지 확인해 주세요.

다시 한 번 시도해 봤습니다… :slight_smile: 그리고 algolia discourse username 설정에서 'system’을 제거하고 대신 더미 유저로 rake algolia:reindex를 실행하면 오류 없이 작동한다는 것을 확인했습니다. :+1:

부끄럽게도 설명서에 있는 아래 부분을 놓치고 있었습니다:

공개된다고 판단하는 콘텐츠만 볼 수 있는 별도 더미 유저를 생성하고, 이 값을 해당 유저의 사용자 이름으로 변경하는 것이 권장됩니다.

그리고 이 지침에 따라 설정만 일치시켰을 뿐이었습니다:

모든 설정이 켜지고 값이 입력된 후, 플러그인 설정은 다음과 같이 보야 합니다:

개인적으로 (편향된 시각일 수 있습니다 :slight_smile:) 이 설명서를 조금 더 명확하게 만들 수 있을 것 같습니다. :slight_smile: 설정 흐름의 일부로 ‘Algolia Discourse 유저 생성’ 섹션을 추가하는 것을 제안합니다.

사실, 최신 PR에서 해당 옵션을 제거했습니다. 위험할 수 있기 때문입니다. 관리자 권한이 있는 사용자가 사용될 경우, 검색에서 제한된 게시물이 표시될 수 있습니다.

더 좋은 아이디어네요. :slight_smile:

안녕하세요,
감사합니다, 이제 작동합니다 :slight_smile: 제 세 가지 인덱스가 생성되어 Algolia로 전송되었습니다!