Ошибка 500 во входящих сообщениях пользователя

Привет,

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

Мы запускаем Discourse в Docker за Apache с использованием ProxyPass. Версия Discourse: 2.6.0.beta3.

У этого пользователя не раскрывается панель сообщений; там отображается надпись «No Content» или что-то подобное оригинальному английскому тексту (у нас стоит локаль de.DE, так что в интерфейсе было «Keine Inhalte»).

Если теперь снова нажать на значок сообщений (то есть попытаться открыть почтовый ящик сообщений), возникает ошибка 500.

На странице отображается: "error on loading: [/topics/private-messages/firstname.name.json].

Это происходит только с одним конкретным пользователем. У других такой проблемы нет.

Если пользователь пытается перейти по ссылкам https://domain.de/u/firstname.name/messages/sent или https://domain.de/u/firstname.name/messages/group/any, всё работает нормально.

Однако переходы по ссылкам https://domain.de/u/firstname.name/messages/ или https://domain.de/u/firstname.name/messages/inbox приводят к ошибке 500.

Мы пробовали менять роли этого пользователя, обновляли систему и пересобирали приложение через launcher. К сожалению, ошибка 500 при открытии почтового ящика всё ещё возникает.

Сталкивался ли кто-нибудь с подобным поведением? Что можно сделать? Есть ли способ пересобрать сообщения? Или их придётся удалить?

Пожалуйста, дайте совет, мы сейчас в тупике.

Заранее спасибо!

Недавно я видел нечто подобное, но с именем группы в /topics/private-messages-group. Оказалось, что поиск чувствителен к регистру, а имя группы в URL было написано полностью в нижнем регистре.

Можете проверить, изменится ли поведение, если вы приведёте регистр в URL к регистру имени пользователя? (например, https://domain.de/u/Firstname.Name/messages)

Привет, Ричард,

спасибо за быстрый ответ!

Я попробовал изменить регистр, как вы предложили:

  • …Firstname.Name…

Также я пробовал другие варианты регистра:

  • …firstname.Name…
  • …Firstname.name…
  • …FIRSTNAME.NAME…

Но ошибка всё та же.

Я также пробовал https://domain.de/u/Firstname.Name/messages/sent и другие маршруты — они работают отлично, как и раньше.

Есть ли какие-то подсказки по этому поводу?

Буду очень благодарен за помощь.

Это уже было довольно рискованно, поэтому, боюсь, я даже не смогу дать вам какие-либо подсказки по этому поводу.

Никаких проблем, никогда не знаешь, верно? Я буду рад любой помощи.

Может быть, кто-то ещё сможет что-то предложить?
Спасибо!

Привет,

Я очень надеюсь, что кто-то сможет помочь нам с нашей проблемой. Как намекнул @RGJ, мы выяснили, что дело, похоже, глубже, но мы всё ещё не смогли решить проблему недоступности почтовых ящиков у одного пользователя. К сожалению, мы действительно очень активно используем сообщения. Мы организованы в небольшие группы, которым часто нужно общаться не публично. Поэтому сообщения — идеальный способ для этого.

Если вам нужна дополнительная информация или логи, дайте знать, что именно, и я скопирую их сюда.

Спасибо всем за дополнительные подсказки и за то, что дочитали до конца :wink:

Проверяли ли вы логи ошибок через веб-браузер, будучи авторизованным как администратор?

@codinghorror большое спасибо за дальнейшую помощь.

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

Я пытаюсь разместить здесь информацию о логировании

Сообщение (21 копия)

NoMethodError (undefined method `downcase' for nil:NilClass)
app/models/global_setting.rb:107:in `s3_bucket_name'
app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'
lib/url_helper.rb:90:in `cook_url'
app/models/topic.rb:126:in `image_url'
app/serializers/listable_topic_serializer.rb:34:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:451:in `serialize_data'
app/controllers/application_controller.rb:460:in `render_serialized'
lib/topic_list_responder.rb:16:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:177:in `message_route'
app/controllers/list_controller.rb:164:in `block in generate_message_route'
app/controllers/application_controller.rb:351:in `block in with_resolved_locale'
app/controllers/application_controller.rb:351:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336: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:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Backtrace

app/models/global_setting.rb:107:in `s3_bucket_name'
app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'
lib/url_helper.rb:90:in `cook_url'
app/models/topic.rb:126:in `image_url'
app/serializers/listable_topic_serializer.rb:34:in `image_url'
(eval):10: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/associations.rb:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:368:in `block in include_associations!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `each_key'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `include_associations!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:362:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:343:in `as_json'
app/controllers/application_controller.rb:451:in `serialize_data'
app/controllers/application_controller.rb:460:in `render_serialized'
lib/topic_list_responder.rb:16:in `block (2 levels) in respond_with_list'
actionpack (6.0.3.3) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:177:in `message_route'
app/controllers/list_controller.rb:164:in `block in generate_message_route'
actionpack (6.0.3.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.0.3.3) lib/abstract_controller/base.rb:195:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:112:in `block in run_callbacks'
app/controllers/application_controller.rb:351:in `block in with_resolved_locale'
i18n (1.8.5) lib/i18n.rb:313:in `with_locale'
app/controllers/application_controller.rb:351:in `with_resolved_locale'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:139:in `run_callbacks'
actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `block in instrument'
activesupport (6.0.3.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `instrument'
actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (6.0.3.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.0.3.3) lib/abstract_controller/base.rb:136:in `process'
actionview (6.0.3.3) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.1.0) lib/mini_profiler/profiling_methods.rb:78:in `block in profile_method'
actionpack (6.0.3.3) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.0.3.3) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:834:in `call'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/cookies.rb:648:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.9.4) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.0.3.3) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.0.3.3) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/request_id.rb:27:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/host_authorization.rb:76:in `call'
rack-mini-profiler (2.1.0) lib/mini_profiler/profiler.rb:235:in `call'
message_bus (3.3.2) lib/message_bus/rack/middleware.rb:61:in `call'
lib/middleware/request_tracker.rb:176:in `call'
railties (6.0.3.3) lib/rails/engine.rb:527:in `call'
railties (6.0.3.3) lib/rails/railtie.rb:190:in `public_send'
railties (6.0.3.3) lib/rails/railtie.rb:190:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (5.7.0) lib/unicorn/http_server.rb:632:in `process_client'
unicorn (5.7.0) lib/unicorn/http_server.rb:728:in `worker_loop'
unicorn (5.7.0) lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
unicorn (5.7.0) lib/unicorn/http_server.rb:144:in `start'
unicorn (5.7.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

ENV

hostname config-app
process_id 273
application_version 891987a2843de3ebeed412e01fd6b8064dac3917
HTTP_HOST sub.domain..de
REQUEST_URI /topics/private-messages/firstname.name.json
REQUEST_METHOD GET
HTTP_USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:81.0) Gecko/20100101 Firefox/81.0
HTTP_ACCEPT application/json, text/javascript, /; q=0.01
HTTP_REFERER https://sub.domain.de/u/firstname.name/messages
HTTP_X_FORWARDED_FOR 2003:d6:9720:2500:c4b4:5a78:fb34:fbe8, unix:
HTTP_X_REAL_IP unix:
username firstname.name
time 8:38 pm

Ну, это много, и я не имею ни малейшего представления, куда смотреть. Надеюсь, это прольёт свет на нашу проблему. Если вам понадобится дополнительная информация, пожалуйста, дайте знать.

Большое спасибо за то, что уделили время этому!
СПАСИБО

Неверно ли указано ваше s3_bucket_name?

Спасибо за ответ.

Короткий ответ: я не знаю, и мне кажется, что нет.

Имя S3 Bucket, похоже, связано с системой хранения S3 Amazon, верно? И если так, то, вероятно, оно не может быть некорректным. Мы его никогда не настраивали. Мы запускаем Discourse в Docker через обратный прокси-сервер Apache.

И если имя S3 Bucket некорректно, разве это не должно вызывать множество сбоев, а не только одну ошибку на маршруте одного пользователя?

Пожалуйста, не поймите меня неправильно. Возможно, я вообще не туда иду. Как я уже сказал, я не уверен, что такое s3_bucket_name или, если я правильно понял, зачем его вообще нужно настраивать.

Могу ли я посмотреть это в панели администратора или мне нужно проверить docker-compose?

Извините за задержку с ответом… разные часовые пояса и рабочие часы… вы понимаете.

Но большое спасибо, что вы обратили на это внимание!

Я посмотрел настройки — все параметры S3 пустые. Это правильно? Мы ведь не используем SE Buckets. Или я что-то не так понял?

Вы включили настройку сайта «secure media»?

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

Поскольку мы не сталкивались с этой ошибкой с самого начала, возможно, она вызвана встроенным изображением, отправленным по электронной почте?

Стоит ли мне попробовать отключить эту опцию?

Но, как я уже сказал,

Так что, если учётные данные S3 вообще не заданы, функция безопасной работы с медиа не должна работать, верно?

Кто-нибудь ещё здесь и знает, что мы могли бы попробовать?

Дело в том, что у одного из наших администраторов возникла эта проблема, и из-за этого общение становится крайне затруднительным, ведь администратор не может отвечать на сообщения или даже просматривать их.

На данный момент решением было бы восстановить доступ к входящим сообщениям. Есть ли какой-то обходной путь или возможность восстановить учётную запись одного пользователя или, не знаю, удалить все сообщения для одного конкретного пользователя? Чтобы мы могли начать с нуля для этого аккаунта?

Более того, я даже думал об удалении этого аккаунта, но, насколько я понял, удаление пользователей невозможно. Что ещё мы могли бы попробовать, чтобы создать новый аккаунт для этого пользователя и снова сделать участие возможным?

Пожалуйста, сообщите, какие идеи у вас есть, я в полном замешательстве.

Заранее спасибо.

Извините, мне нужно спросить ещё раз. Поскольку у нас всё ещё есть эта проблема:

Вы имели в виду, следует ли нам включить «безопасные медиа» как часть проблемы или как часть решения?

У нас эта опция не активирована. Должны ли мы её включить?

Или нам лучше оставить всё как есть и надеяться на другие подсказки, чтобы это исправить?

Здравствуйте,
кажется, я столкнулся с похожей проблемой. Сообщения для одного пользователя, насколько нам известно, не работают.
Есть ли какие-либо дополнительные идеи, на что мы могли бы обратить внимание??

По словам Джей:

Я бы попробовал заменить условие where("user_id > 0") на что-то вроде where("user_id = id-вашего-пользователя").

Насчёт причины этого: я бы поставил на что-то локальное. У меня самого иногда возникают проблемы с кавычками, акцентами и т. д. :wink:

Мм, звучит как попытка.

Думая о локализации, я задумался: должно ли поведение меняться в зависимости от настроек интерфейса пользователя? Есть ли у вас какие-то мысли на этот счёт?

В ближайшие дни я попробую решение с удалением.

Спасибо за помощь.

Тем временем мы немного подумали. Возможно, у кого-то ещё есть идеи, которыми можно поделиться.

Ещё одна странность: в области панели сообщений при нажатии на иконку пользователя, а затем на конверт, должны отображаться все последние сообщения, верно? В случае с нашими пользователями, которые не могут открыть почтовый ящик, там вообще ничего нет?

Возможно, у кого-то есть какие-то идеи по этому поводу. Мы точно знаем, что там должны быть какие-то записи.

Возможно, это поможет навести на какие-то мысли?

И ещё один вариант размышлений. У нас по-прежнему возникает какая-то ошибка SSL на сайте. Как я уже говорил, мы запускаем Discourse в Docker за обратным прокси на Apache. Домен имеет действующий SSL-сертификат от Let’s Encrypt.

Тем не менее на сайте появляются предупреждения о смешанном содержимом. Стандартные логотипы и фавиконки, по всей видимости, отдаются по HTTP. Мы удалили кастомные брендинги, надеясь избавиться от ошибок смешанного содержимого.

Так возможно ли, что это и вызывает проблему?

Когда мы недавно обратились к JSON-маршруту https://sub.domain.de/topics/private-messages/firstnamename.json,

получили следующий результат:

{
	"status":500,
	"error":"Internal Server Error"
}

Более внимательный анализ логов показал следующее:

NoMethodError (undefined method `downcase' for nil:NilClass)
app/models/global_setting.rb:107:in `s3_bucket_name'
app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'
lib/url_helper.rb:90:in `cook_url'
app/models/topic.rb:126:in `image_url'
app/serializers/listable_topic_serializer.rb:34:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:454:in `serialize_data'
app/controllers/application_controller.rb:463:in `render_serialized'
lib/topic_list_responder.rb:16:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:177:in `message_route'
app/controllers/list_controller.rb:164:in `block in generate_message_route'
app/controllers/application_controller.rb:354:in `block in with_resolved_locale'
app/controllers/application_controller.rb:354:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:354: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:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Поскольку мы не используем защищённые медиафайлы и не подключаем S3, меня всё ещё смущают эти записи в логе:

app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'

Так возможно ли, что причина кроется в скрытой ошибке смешанного содержимого?

Спасибо, что продолжаете поддерживать нас.