Плагин автоматизации Discourse не работает из-за ошибки «internal server error»

До последнего обновления существовала автоматизация с использованием плагина Automation, выполнявшая следующие действия (что было протестировано и работало успешно без каких-либо изменений):

  • Скрипт: Отправка личных сообщений
  • Когда: «Пользователь добавлен в группу»
  • Отслеживаемая группа: «группа, где требуется предварительное одобрение заявок владельцем группы»
  • Параметры скрипта: одно личное сообщение (протестировано и работало успешно).

В настоящее время в версии 3.5.0.beta3-dev(231e9ca99a) при попытке одобрить пользователей появляется ошибка «внутренняя ошибка сервера».

Ниже приведена ошибка, которая возникает:

PG::NotNullViolation (ERROR:  null value in column "total_time" of relation "discourse_automation_stats" violates not-null constraint
DETAIL:  Failing row contains (18, 8, 2025-04-10, 2025-04-10 07:34:42.740189, null, null, null, null, 1).
)
lib/mini_sql_multisite_connection.rb:109:in `run'
lib/plugin/instance.rb:609:in `block in on'
lib/discourse_event.rb:12:in `block in trigger'
lib/discourse_event.rb:12:in `trigger'
app/models/group.rb:869:in `trigger_user_added_event'
app/models/group.rb:838:in `add'
app/controllers/groups_controller.rb:502:in `block in handle_membership_request'
app/controllers/groups_controller.rb:500:in `handle_membership_request'
app/controllers/application_controller.rb:427:in `block in with_resolved_locale'
app/controllers/application_controller.rb:427:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:410:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:26:in `call'
lib/middleware/default_headers.rb:13:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/processing_request.rb:12:in `call'
lib/middleware/request_tracker.rb:385:in `call'

Я подозреваю, что это связано с новыми изменениями в таблице discourse_automation_stats, упомянутыми здесь:

Спасибо!

1 лайк

Спасибо за отчет. Я думаю, у вас есть другая ошибка, но добавленный нами код состояния её скрывает.

Это должно исправить проблему:

После этого мы сможем увидеть фактическую ошибку.

2 лайка

Спасибо!

Это значит, что после обновления мне нужно получить фактическую ошибку?

1 лайк

Да, пожалуйста, хотя, полагаю, вы сможете исправить это самостоятельно.

2 лайка

Спасибо за ваше терпение!

Я снова получаю общую ошибку {"status":422,"error":"Unprocessable Entity"}. Пожалуйста, посмотрите скриншот после нажатия на «одобрить»:

Данные запроса отправляются в формате формы (application/x-www-form-urlencoded; charset=UTF-8):
user_id=10127&accept=true

Спасибо! Хотя я не понимаю, почему сообщается об ошибке «unprocessable entity» (необрабатываемый объект), есть какие-то советы?

Извините, но это не похоже на автоматизацию.

Не могли бы вы нажать на «Ответ» на первом скриншоте?

Привет
Спасибо! Ответ тот же…

Я провёл дополнительное расследование и понял, что…

Уже произошли два изменения:

  1. Пользователь успешно добавляется в группу
  2. Автоматическое сообщение отправляется
  3. Эта ошибка «unprocessable entity» не появляется, когда запрос на вступление в группу принимает учётная запись администратора, но она возникает у обычного владельца группы (не администратора), даже если пункты 1 и 2 теперь выполняются успешно как для администратора, так и для не-администратора.

Похоже, теперь мы говорим о новой проблеме (учитывая, что вышеуказанные функции работают, но результат неясен, когда процесс блокируется этой новой ошибкой)…

Даже логи ошибок сервера изменились:

info log
ActiveRecord::RecordNotSaved (Что-то пошло не так. Возможно, эта тема была закрыта или удалена, пока вы её просматривали?)
lib/post_creator.rb:238:in `create!'
app/controllers/groups_controller.rb:523:in `handle_membership_request'
app/controllers/application_controller.rb:427:in `block in with_resolved_locale'
app/controllers/application_controller.rb:427:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:410:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:26:in `call'
lib/middleware/default_headers.rb:13:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/processing_request.rb:12:in `call'
lib/middleware/request_tracker.rb:385:in `call'
backtrace log
lib/post_creator.rb:238:in `create!'
app/controllers/groups_controller.rb:523:in `handle_membership_request'
actionpack (7.2.2.1) lib/action_controller/metal/basic_implicit_render.rb:8:in `send_action'
actionpack (7.2.2.1) lib/abstract_controller/base.rb:226:in `process_action'
actionpack (7.2.2.1) lib/action_controller/metal/rendering.rb:193:in `process_action'
actionpack (7.2.2.1) lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport (7.2.2.1) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
app/controllers/application_controller.rb:427:in `block in with_resolved_locale'
i18n (1.14.7) lib/i18n.rb:353:in `with_locale'
app/controllers/application_controller.rb:427:in `with_resolved_locale'
activesupport (7.2.2.1) lib/active_support/callbacks.rb:130:in `block in run_callbacks'
activesupport (7.2.2.1) lib/active_support/callbacks.rb:141:in `run_callbacks'
actionpack (7.2.2.1) lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack (7.2.2.1) lib/action_controller/metal/rescue.rb:27:in `process_action'
actionpack (7.2.2.1) lib/action_controller/metal/instrumentation.rb:77:in `block in process_action'
activesupport (7.2.2.1) lib/active_support/notifications.rb:210:in `block in instrument'
activesupport (7.2.2.1) lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport (7.2.2.1) lib/active_support/notifications.rb:210:in `instrument'
actionpack (7.2.2.1) lib/action_controller/metal/instrumentation.rb:76:in `process_action'
actionpack (7.2.2.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (7.2.2.1) lib/active_record/railties/controller_runtime.rb:39:in `process_action'
actionpack (7.2.2.1) lib/abstract_controller/base.rb:163:in `process'
actionview (7.2.2.1) lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler (3.3.1) lib/mini_profiler/profiling_methods.rb:89:in `block in profile_method' 
actionpack (7.2.2.1) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (7.2.2.1) lib/action_controller/metal.rb:335:in `dispatch'
actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:50:in `serve'
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:53:in `block in serve'
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:126:in `each'
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:126:in `find_routes'
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:34:in `serve'
actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:896:in `call'
lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
rack (2.2.13) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.13) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.13) lib/rack/head.rb:12:in `call'
actionpack (7.2.2.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:410:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:26:in `call'
rack (2.2.13) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.13) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/cookies.rb:704:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
activesupport (7.2.2.1) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (7.2.2.1) lib/action_dispatch/middleware/callbacks.rb:30:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
logster (2.20.1) lib/logster/middleware/reporter.rb:40:in `call'
lib/middleware/default_headers.rb:13:in `call'
railties (7.2.2.1) lib/rails/rack/logger.rb:41:in `call_app'
railties (7.2.2.1) lib/rails/rack/logger.rb:29:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/request_id.rb:33:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
rack (2.2.13) lib/rack/method_override.rb:24:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/executor.rb:16:in `call'
rack (2.2.13) lib/rack/sendfile.rb:110:in `call'
rack-mini-profiler (3.3.1) lib/mini_profiler.rb:191:in `call'
lib/middleware/processing_request.rb:12:in `call'
message_bus (4.4.1) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:385:in `call'
actionpack (7.2.2.1) lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
railties (7.2.2.1) lib/rails/engine.rb:535:in `call'
railties (7.2.2.1) lib/rails/railtie.rb:226:in `public_send'
railties (7.2.2.1) lib/rails/railtie.rb:226:in `method_missing'
rack (2.2.13) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.13) lib/rack/urlmap.rb:58:in `each'
rack (2.2.13) 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/3.3.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'
env log
hostname community-app
process_id 913
application_version 6fc5ce968892b980c3db6b19b49683fb38a59e29
HTTP_HOST meta.discourse.org
REQUEST_URI /groups/200/handle_membership_request.json
REQUEST_METHOD PUT
HTTP_USER_AGENT Mozilla/5.0
HTTP_ACCEPT /
HTTP_REFERER https://meta.discourse.org/g/group_name/requests
HTTP_X_FORWARDED_FOR 0.0.0.0
HTTP_X_REAL_IP 0.0.0.0
username copuxtest
time 7:37 am
params
user_id 5836
accept true

Извините, но я очень запутался, как это связано с темой. Вы не получаете эту ошибку через автоматизацию, верно? Насколько я понимаю, это прямое действие, которое вы выполняете в админке.

1 лайк

Снова привет!
Спасибо, что уделили время этому вопросу, думаю, теперь всё исправлено. Изначально ошибка появлялась только после активации автоматизации (первая ошибка была опубликована в первом сообщении), а после вашего исправления она исчезла, но в логах, как объяснялось выше, появилась другая ошибка.

Ошибки исчезли после того, как я сделал следующее:

  1. Отключил автоматизацию
  2. Очистил кэш браузера
  3. Снова включил автоматизацию

После включения/выключения автоматизации и очистки кэша все ошибки исчезли. Спасибо!

О, очень удивительно, но если у вас это работает, то всё отлично! Спасибо за обновление.

1 лайк

Спасибо! :slight_smile:

Эта тема была автоматически закрыта через 3 дня после последнего ответа. Новые ответы больше не принимаются.