토픽 자동 닫힘 – ‘Internal Server Error’ 지속 발생

이전 주제 이름: “이 주제는 마지막 답변 후 몇 초 후에 닫힙니다.”

Discourse 2.5.0.beta2 +207로 업데이트한 후, 주제 타이머가 설정된 많은 카테고리에서 기본 설정이 "몇 초"로 갑자기 변경되었습니다.


배경: 우리 사이트의 여러 카테고리에 “마지막 답변 후 x시간 후에 주제 닫기” 설정이 있습니다. 대부분 672시간입니다. 이는 개별 카테고리 설정입니다.

업데이트 후, 닫기까지 남은 시간으로 "몇 초"가 시각적으로 표시되게 되었습니다. 하지만 실제로는 닫히지 않으며, 답변을 시도하는 사용자는 “Internal Server Error” 팝업 메시지를 받게 됩니다. /logs에는 다음과 같은 내용이 기록됩니다:

NoMethodError (undefined method `>' for nil:NilClass) /var/www/discourse/lib/post_creator.rb:473:in `update_topic_auto_close'
전체 로그 항목
/var/www/discourse/lib/post_creator.rb:473:in `update_topic_auto_close'

/var/www/discourse/lib/post_creator.rb:183:in `block in create'

/var/www/discourse/lib/post_creator.rb:366:in `block (2 levels) in transaction'

activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `block in transaction'

activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'

/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'

activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'

activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `transaction'

activerecord-6.0.1/lib/active_record/transactions.rb:212:in `transaction'

/var/www/discourse/lib/post_creator.rb:365:in `block in transaction'

/var/www/discourse/lib/distributed_mutex.rb:33:in `block in synchronize'

/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'

/var/www/discourse/lib/distributed_mutex.rb:29:in `synchronize'

/var/www/discourse/lib/distributed_mutex.rb:14:in `synchronize'

/var/www/discourse/lib/post_creator.rb:364:in `transaction'

/var/www/discourse/lib/post_creator.rb:174:in `create'

/var/www/discourse/lib/new_post_manager.rb:271:in `perform_create_post'

/var/www/discourse/lib/new_post_manager.rb:209:in `perform'

/var/www/discourse/app/controllers/posts_controller.rb:179:in `create'

actionpack-6.0.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack-6.0.1/lib/abstract_controller/base.rb:196:in `process_action'

actionpack-6.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'

actionpack-6.0.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'

activesupport-6.0.1/lib/active_support/callbacks.rb:135:in `run_callbacks'

actionpack-6.0.1/lib/abstract_controller/callbacks.rb:41:in `process_action'

actionpack-6.0.1/lib/action_controller/metal/rescue.rb:22:in `process_action'

actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'

activesupport-6.0.1/lib/active_support/notifications.rb:180:in `block in instrument'

activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport-6.0.1/lib/active_support/notifications.rb:180:in `instrument'

actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'

actionpack-6.0.1/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'

activerecord-6.0.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack-6.0.1/lib/abstract_controller/base.rb:136:in `process'

actionview-6.0.1/lib/action_view/rendering.rb:39:in `process'

rack-mini-profiler-2.0.1/lib/mini_profiler/profiling_methods.rb:78:in `block in profile_method'

actionpack-6.0.1/lib/action_controller/metal.rb:191:in `dispatch'

actionpack-6.0.1/lib/action_controller/metal.rb:252:in `dispatch'

actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:51:in `dispatch'

actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'

actionpack-6.0.1/lib/action_dispatch/journey/router.rb:49:in `block in serve'

actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `each'

actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:837:in `call'

/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'

rack-2.0.8/lib/rack/tempfile_reaper.rb:15:in `call'

rack-2.0.8/lib/rack/conditional_get.rb:38:in `call'

rack-2.0.8/lib/rack/head.rb:12:in `call'

/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'

/var/www/discourse/lib/middleware/anonymous_cache.rb:318:in `call'

rack-2.0.8/lib/rack/session/abstract/id.rb:259:in `context'

rack-2.0.8/lib/rack/session/abstract/id.rb:253:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/cookies.rb:648:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport-6.0.1/lib/active_support/callbacks.rb:101:in `run_callbacks'

actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'

logster-2.7.1/lib/logster/middleware/reporter.rb:43:in `call'

railties-6.0.1/lib/rails/rack/logger.rb:38:in `call_app'

railties-6.0.1/lib/rails/rack/logger.rb:28:in `call'

/var/www/discourse/config/initializers/100-quiet_logger.rb:18:in `call'

/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'

/var/www/discourse/lib/middleware/enforce_hostname.rb:22:in `call'

rack-2.0.8/lib/rack/method_override.rb:22:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/executor.rb:14:in `call'

rack-2.0.8/lib/rack/sendfile.rb:111:in `call'

actionpack-6.0.1/lib/action_dispatch/middleware/host_authorization.rb:77:in `call'

rack-mini-profiler-2.0.1/lib/mini_profiler/profiler.rb:200:in `call'

message_bus-2.2.3/lib/message_bus/rack/middleware.rb:57:in `call'

/var/www/discourse/lib/middleware/request_tracker.rb:181:in `call'

railties-6.0.1/lib/rails/engine.rb:526:in `call'

railties-6.0.1/lib/rails/railtie.rb:190:in `public_send'

railties-6.0.1/lib/rails/railtie.rb:190:in `method_missing'

rack-2.0.8/lib/rack/urlmap.rb:68:in `block in call'

rack-2.0.8/lib/rack/urlmap.rb:53:in `each'

rack-2.0.8/lib/rack/urlmap.rb:53:in `call'

unicorn-5.5.3/lib/unicorn/http_server.rb:605:in `process_client'

unicorn-5.5.3/lib/unicorn/http_server.rb:700:in `worker_loop'

unicorn-5.5.3/lib/unicorn/http_server.rb:548:in `spawn_missing_workers'

unicorn-5.5.3/lib/unicorn/http_server.rb:144:in `start'

unicorn-5.5.3/bin/unicorn:128:in `<top (required)>'

/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'

/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

이 문제를 일으키는 다른 요인이 있을 것이라고 확신하지만, 아직 이를 특정하지 못했습니다.


이를 버그로 보고하는 것 외에도, 이러한 게시물을 수정하는 가장 효율적인 방법이 무엇인지 궁금합니다. 각 게시물의 주제 타이머를 수동으로 편집하여 문제를 해결할 수 있지만, 수백 개의 게시물을 수동으로 편집해야 합니다.

주제를 일괄적으로 닫았다가 다시 여는 것도 문제를 해결하는 데 도움이 되지만, 여전히 주제 타이머를 다시 적용해야 합니다. 또한 주제를 수동으로 다시 여야 합니다. 일괄적으로 닫을 수는 있지만 다시 여는 것은 수동으로만 가능하기 때문입니다.

이상적으로는 “주제 타이머” 카테고리 설정을 재귀적으로 적용할 수 있는 설정이 있으면 좋겠습니다. 이 버그 관련 문제와 무관하게도, 이 특정 기능을 사용하려는 사람들에게 분명히 유용할 것입니다. 이것이 이 문제를 해결하는 방법이 될 것이라고 생각합니다.

이 문제를 더 효율적으로 해결하기 위한 조치에 대한 조언이 있다면 감사하겠습니다.

1개의 좋아요

아래 커밋으로 이제 수정되었습니다

5개의 좋아요