Auto-fechar Tópico – "Erro Interno do Servidor" indefinido

Tópico anterior: “Este tópico será fechado alguns segundos após a última resposta.”

Após atualizar para o Discourse 2.5.0.beta2 +207, muitas categorias com temporizador de tópico mudaram repentinamente de sua configuração padrão para "alguns segundos".


Contexto: Várias de nossas categorias possuem a configuração “fechar tópico x tempo após a última resposta”. Para a maioria delas, o valor é de 672 horas. Essas são configurações individuais de cada categoria.

Após a atualização, isso resultou na exibição visual de “alguns segundos” como o tempo restante antes do fechamento. No entanto, o tópico nunca é fechado — e qualquer pessoa que tentar responder receberá uma mensagem de erro pop-up: “Erro Interno do Servidor”. Nos /logs:

NoMethodError (método `>' não definido para nil:NilClass) /var/www/discourse/lib/post_creator.rb:473:in `update_topic_auto_close'
Entrada completa do log
/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>'

Tenho certeza de que deve haver algo mais relacionado a causar esse problema, mas ainda não consegui identificá-lo.


Além de relatar isso como um bug, também tenho curiosidade sobre qual seria a maneira mais eficiente de corrigir esses tópicos? Posso editar manualmente o temporizador de tópico em cada postagem para resolvê-lo, mas isso envolveria editar manualmente centenas de postagens.

Fechar e reabrir tópicos em massa também ajuda a resolver o problema, mas ainda exige reaplicar o temporizador de tópico. Além disso, significa reabrir tópicos manualmente — pois você só pode fechar em massa.

Idealmente, haveria uma configuração para aplicar recursivamente a configuração de categoria “temporizador de tópico”, já que, mesmo fora do nosso problema relacionado ao bug, isso certamente seria útil para quem deseja usar esse recurso específico. Imagino que isso já teria sido um método para resolver esse problema.

Qualquer orientação sobre um curso de ação para resolver o problema de forma mais eficiente será muito bem-vinda.

1 curtida

Isso já foi corrigido pelo commit abaixo

5 curtidas