질문 답변 플러그인 설치 시 Oops 500 오류 발생

안녕하세요, Pavilion QA 플러그인을 설치할 때 동일한 문제가 발생하여 Oops after updating to discouse 2.9 due to Discourse QA plugin - support - Discourse Meta에 보고했습니다.
오늘 테스트 통과 버전(2.9.0.beta6)에서 Discourse의 QA 플러그인을 설치해 보았지만 여전히 동일한 문제가 발생합니다.
QA 플러그인을 비활성화하면 모든 것이 정상적으로 작동합니다.
500 error when saving category security settings - bug - Discourse Meta에서 유사한 오류 메시지를 발견했습니다. 이 둘이 관련이 있을까요?

shared/standalone/log/rails/production.log에서 확인된 오류 메시지:

NoMethodError (undefined method `>=' for nil:NilClass)
(eval):78:in `_fast_attributes'
app/controllers/application_controller.rb:639:in `preload_current_user_data'
app/controllers/application_controller.rb:439:in `preload_json'
app/controllers/application_controller.rb:415:in `block in with_resolved_locale'
app/controllers/application_controller.rb:415:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:368:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:202:in `call'

그리고 웹페이지의 일부 스크린샷입니다.

다음 템플릿을 사용하고 있습니다:

- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
- "templates/web.socketed.template.yml"
- "templates/cloudflare.template.yml"

그리고 다음 플러그인을 설치했습니다:

- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-knowledge-explorer.git
- git clone https://github.com/discourse/discourse-data-explorer.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-rss-polling.git
- git clone https://github.com/discourse/discourse-feature-voting.git
- git clone https://github.com/discourse/discourse-math.git
- git clone https://github.com/discourse/discourse-checklist.git
- git clone https://github.com/discourse/discourse-question-answer.git

업데이트 백트레이스:

plugins/discourse-feature-voting/plugin.rb:162:in `reached_voting_limit?'
plugins/discourse-feature-voting/plugin.rb:175:in `votes_exceeded'
(eval):78:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
activesupport (7.0.3) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (7.0.3) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (7.0.3) lib/active_support/core_ext/object/json.rb:42:in `to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `to_json'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapter.rb:25:in `dump'
multi_json (1.15.0) lib/multi_json.rb:139:in `dump'
app/controllers/application_controller.rb:639:in `preload_current_user_data'
app/controllers/application_controller.rb:439:in `preload_json'
activesupport (7.0.3) lib/active_support/callbacks.rb:400:in `block in make_lambda'
activesupport (7.0.3) lib/active_support/callbacks.rb:199:in `block (2 levels) in halting'
actionpack (7.0.3) lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
activesupport (7.0.3) lib/active_support/callbacks.rb:200:in `block in halting'
activesupport (7.0.3) lib/active_support/callbacks.rb:595:in `block in invoke_before'
activesupport (7.0.3) lib/active_support/callbacks.rb:595:in `each'
activesupport (7.0.3) lib/active_support/callbacks.rb:595:in `invoke_before'
activesupport (7.0.3) lib/active_support/callbacks.rb:116:in `block in run_callbacks'
app/controllers/application_controller.rb:415:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:415:in `with_resolved_locale'
activesupport (7.0.3) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
activesupport (7.0.3) lib/active_support/callbacks.rb:138:in `run_callbacks'
actionpack (7.0.3) lib/abstract_controller/base.rb:151:in `process'
actionview (7.0.3) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (7.0.3) lib/action_controller/metal.rb:188:in `dispatch'
actionpack (7.0.3) lib/action_controller/metal.rb:251:in `dispatch'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (7.0.3) lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
actionpack (7.0.3) lib/action_dispatch/routing/mapper.rb:48:in `serve'
actionpack (7.0.3) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (7.0.3) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (7.0.3) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (7.0.3) lib/action_dispatch/routing/route_set.rb:852:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3.1) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3.1) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3.1) lib/rack/head.rb:12:in `call'
actionpack (7.0.3) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:368:in `call'
rack (2.2.3.1) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3.1) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/cookies.rb:697:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (7.0.3) lib/active_support/callbacks.rb:99:in `run_callbacks'
actionpack (7.0.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'
logster (2.11.2) lib/logster/middleware/reporter.rb:43:in `call'
railties (7.0.3) lib/rails/rack/logger.rb:40:in `call_app'
railties (7.0.3) lib/rails/rack/logger.rb:27:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3.1) lib/rack/method_override.rb:24:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3.1) lib/rack/sendfile.rb:110:in `call'
actionpack (7.0.3) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'
message_bus (4.2.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:202:in `call'
railties (7.0.3) lib/rails/engine.rb:530:in `call'
railties (7.0.3) lib/rails/railtie.rb:226:in `public_send'
railties (7.0.3) lib/rails/railtie.rb:226:in `method_missing'
rack (2.2.3.1) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3.1) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3.1) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

투표(voting)와 관련된 부분이 보입니다. 투표 기능과 질문-답변(question-answer) 기능 사이에 충돌이 있는 것일까요?

1개의 좋아요

안녕하세요, 저도 이 문제에 대해 조금 시도해 보았습니다.
2.9.0 beta 7에서는 문제가 여전히 발생합니다.
백트레이스에 "voting"과 관련된 내용이 포함되어 있어서, 두 플러그인 사이에 충돌이 있는 것 같습니다.
voting 플러그인을 삭제하고 (q/a 플러그인만 설치) 테스트해 보니 정상적으로 작동했습니다!
이 정보가 문제 해결에 도움이 되기를 바랍니다.

죄송합니다 @yhmtsai, 투표 충돌에 대한 업데이트를 보지 못했습니다. 테스트 사이트에는 Voting과 Q&A가 모두 설치되어 있고, 서로 잘 작동하는 것 같습니다. 해당 두 플러그인만 설치한 새로운 테스트 사이트를 만들어서 어떤 일이 있었는지 파악해 보겠습니다.

관련이 있을 수 있는 다른 세부 사항이 떠오르나요?

1개의 좋아요

안녕하세요, 답변 주셔서 감사합니다.
투표 플러그인을 다시 활성화하니 다시 작동합니다. :face_with_raised_eyebrow:
투표를 먼저 설치한 다음 qa를 설치하는 방식도 시도해 보았지만, 여전히 잘 작동했습니다.
추측컨대, 오래된 qa에서 투표로 유지된 어떤 요소가 qa 플러그인을 삭제해도 오류를 유발하는 것 같습니다. 데이터를 정리하기 위해 투표를 삭제한 후, 새로운 qa와 투표가 다시 함께 잘 작동했습니다.
다만, 해당 플러그인 간 상호작용에 익숙하지 않아 추측만 하고 있는 것입니다…

1개의 좋아요

최근 테스트 사이트를 새로 구축할 때 저도 비슷한 문제를 겪었는데, 원인은 투표 플러그인에 대해 최신 버전인 discourse-voting 대신 오래된 discourse-feature-voting git을 실수로 사용한 것이었습니다. 이로 인해 컴포넌트가 의도하지 않은 순서로 로드되는 문제가 발생했죠. :slight_smile:

최근 두 투표 플러그인 모두 discourse-topic-voting과 discourse-post-voting으로 이름이 변경되었으므로, 여전히 문제가 발생하고 있다면 app.yml에서 discourse-feature-voting을 제거하고 업데이트된 플러그인을 사용해보시길 권합니다. 그러면 문제가 해결될 것입니다. :+1:

1개의 좋아요

discourse가 URL 업데이트에 대한 경고 또는 알림을 표시할 수 있다면 도움이 될 것입니다.
이름 변경은 드물게 일어나는 일이라고 생각하기 때문에, 이를 구현하는 것이 가치가 있는지 확신이 서지 않습니다.