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

Например, на моём форуме я внезапно перестал(а) входить в аккаунт без каких-либо действий с моей стороны. Проблема не в том, что нельзя обновить Discourse, когда GitHub недоступен, а в том, что недоступность GitHub приводит к тому, что ваш форум перестаёт работать, поскольку Discourse пытается проверить наличие обновлений, которые вы могли бы выполнить.

Да, именно так.

Я думаю, что это было вызвано чрезмерным стремлением рассказать людям о новых функциях — причём в текущем сериализаторе пользователя — в сочетании с трёхлетней давности изменением, которое устранило использование обычных «поверхностных» клонов (shallow clones):

@Ed_S и @jeanas, вы оба админы на затронутых инстансах, верно? Это должно касаться только админов, пока GitHub недоступен.

Да, именно так. Я мог войти с другой учётной записью, но не с административной.

Круто, я объединил PR. Сообщите, когда он попадёт в канал релиза, который вы используете, а затем подождите пару дней, пока GitHub снова не отвалится, и напишите, как всё прошло.

Отлично, спасибо. Только для уточнения: я администратор, у меня есть два модератора, и один из них был затронут. Значит, либо это касается всего персонала, либо всех пользователей, вошедших в систему. Мне было нормально, что доступ был в режиме инкогнито. И в моём случае я иногда мог войти, но с большим задержкой — я не был полностью заблокирован.

Отлично, большое спасибо за быстрый фикс!

Похоже, я столкнулся с той же самой проблемой, что и автор темы.

Нагрузка на сервер постоянно росла. Сначала наблюдались странные перебои в производительности, а затем экран «Oops» стал постоянным. Это продолжалось последние 3–4 дня.

Теперь, когда сработало много ограничений частоты запросов Let’s Encrypt и сборка была пересобрана, я протестировал вход под пользователем без прав администратора — и мне удалось войти!

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

Что я упускаю из виду?

Вы можете войти в систему как администратор?

Немного обратной связи — я, кажется, столкнулся с этой проблемой примерно с 19 сентября (изначально я ошибся в диагнозе, так как не знал об этой теме/отчёте).

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

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

Это странное состояние: корабль без капитана, но с пассажирами и, возможно, без экипажа.

Пока я писал этот ответ, я подумал, что, возможно, если я создам нового администратора с помощью команды rake, это сработает. И угадывайте, что произошло — это сработало!

Так что сейчас происходит следующее: исторический администратор пытается войти в систему и каждый раз получает экран «Oops…», в то время как у нового пользователя-администратора нет никаких проблем с доступом.

Да. В моём случае проблема, похоже, решена.

Так, @Ed_S, ты в итоге снова вошёл, верно? Но, судя по всему, тебе пришлось подождать некоторое время, в то время как я до сих пор не могу получить доступ (пострадали исходные аккаунты администраторов). Меня интересует, может быть, проблема шире, чем «зависание git», с которой до сих пор справлялись коммитами. Есть ли у тебя или у кого-нибудь ещё советы или идеи по поводу диагностики, которую стоит запустить, чтобы выявить что-то более глубокое?

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

Да, мой форум пострадал из-за того, что системы GitHub были настроены слишком «защитно», и всё вернулось в норму спустя несколько часов, когда они выпустили какой-то фикс.

Возможно, они снова что-то сделали, что ломает форумы на Discourse. Это может зависеть от географического положения или от конкретного провайдера. Я использую Hetzner, в Хельсинки.

Хорошо, этот инстанс — виртуальный сервер (Droplet) на базе DigitalOcean в США. :thinking:

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

Сейчас администраторы не могут войти в инстанс Discourse до пересборки, а после пересборки — могут.

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

Это очень точечное и коварное нарушение, не находишь?

  • Пользователи остаются целы и невредимы, в то время как капитан и экипаж связаны в трюме, а корабль плывёт к горизонту. :thinking:

Я прочитал эту тему и в общих чертах понимаю, что якобы зависимость от git не должна была вызвать это, но если бы ты был хитрой ролевой ИИ, разве это не идеальный способ взломать Discourse?

К тому же, в данном случае проблема всё ещё не решена. Я не понимаю почему.

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

activesupport (8.1.4) lib/active_support/values/time_zone.rb:461:in 'Date._parse'

activesupport (8.1.4) lib/active_support/values/time_zone.rb:461:in 'ActiveSupport::TimeZone#parse'

app/serializers/current_user_serializer.rb:216:in 'CurrentUserSerializer#has_new_upcoming_changes'

(eval at active_model_serializers-0.8.4/lib/active_model/serializer.rb:467):81:in 'CurrentUserSerializer#_fast_attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:456:in 'ActiveModel::Serializer#attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in 'ActiveModel::Serializer#_serializable_hash'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in 'ActiveModel::Serializer#serializable_hash'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in 'ActiveModel::Serializer#as_json'

activesupport (8.1.4) lib/active_support/json/encoding.rb:53:in 'Oj::Rails::Encoder#encode'

activesupport (8.1.4) lib/active_support/json/encoding.rb:53:in 'ActiveSupport::JSON.encode'

activesupport (8.1.4) lib/active_support/core_ext/object/json.rb:42:in 'ActiveSupport::ToJsonWithActiveSupportEncoder#to_json'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in 'ActiveModel::Serializer#to_json'

multi_json (1.21.1) lib/multi_json/adapters/oj.rb:67:in 'Oj.dump'

multi_json (1.21.1) lib/multi_json/adapters/oj.rb:67:in 'MultiJSON::Adapters::Oj#dump'

multi_json (1.21.1) lib/multi_json/adapter.rb:110:in 'MultiJSON::Adapter.dump'

multi_json (1.21.1) lib/multi_json.rb:215:in 'MultiJSON.generate'

multi_json (1.21.1) lib/multi_json/deprecated.rb:34:in 'Kernel#public_send'

multi_json (1.21.1) lib/multi_json/deprecated.rb:34:in 'block in MultiJSON.deprecate_alias'

multi_json (1.21.1) lib/multi_json.rb:298:in 'Kernel#public_send'

multi_json (1.21.1) lib/multi_json.rb:298:in 'block (2 levels) in <module:MultiJson>'

lib/application_layout_preloader.rb:81:in 'ApplicationLayoutPreloader#preload_current_user_data'

lib/application_layout_preloader.rb:32:in 'ApplicationLayoutPreloader#preloaded_data'

app/helpers/application_helper.rb:987:in 'ApplicationHelper#preloaded_json'

app/views/layouts/application.html.erb:111

actionview (8.1.4) lib/action_view/base.rb:281:in 'Kernel#public_send'

actionview (8.1.4) lib/action_view/base.rb:281:in 'ActionView::Base#_run'

actionview (8.1.4) lib/action_view/template.rb:284:in 'block in ActionView::Template#render'

activesupport (8.1.4) lib/active_support/notifications.rb:212:in 'ActiveSupport::Notifications.instrument'

actionview (8.1.4) lib/action_view/template.rb:590:in 'ActionView::Template#instrument_render_template'

actionview (8.1.4) lib/action_view/template.rb:272:in 'ActionView::Template#render'

rack-mini-profiler (5.0.0) lib/mini_profiler/profiling_methods.rb:90:in 'block in ActionView::Template#profile_method' 

actionview (8.1.4) lib/action_view/renderer/template_renderer.rb:77:in 'block in ActionView::TemplateRenderer#render_with_layout'

activesupport (8.1.4) lib/active_support/notifications.rb:210:in 'block in ActiveSupport::Notifications.instrument'

activesupport (8.1.4) lib/active_support/notifications/instrumenter.rb:58:in 'ActiveSupport::Notifications::Instrumenter#instrument'

activesupport (8.1.4) lib/active_support/notifications.rb:210:in 'ActiveSupport::Notifications.instrument'

actionview (8.1.4) lib/action_view/renderer/template_renderer.rb:75:in 'ActionView::TemplateRenderer#render_with_layout'

actionview (8.1.4) lib/action_view/renderer/template_renderer.rb:59:in 'ActionView::TemplateRenderer#render_template'

actionview (8.1.4) lib/action_view/renderer/template_renderer.rb:11:in 'ActionView::TemplateRenderer#render'

actionview (8.1.4) lib/action_view/renderer/renderer.rb:58:in 'ActionView::Renderer#render_template_to_object'

actionview (8.1.4) lib/action_view/renderer/renderer.rb:31:in 'ActionView::Renderer#render_to_object'

actionview (8.1.4) lib/action_view/rendering.rb:136:in 'block in ActionView::Rendering#_render_template'

actionview (8.1.4) lib/action_view/base.rb:308:in 'ActionView::Base#in_rendering_context'

actionview (8.1.4) lib/action_view/rendering.rb:135:in 'ActionView::Rendering#_render_template'

actionpack (8.1.4) lib/action_controller/metal/streaming.rb:179:in 'ActionController::Streaming#_render_template'

actionview (8.1.4) lib/action_view/rendering.rb:122:in 'ActionView::Rendering#render_to_body'

actionpack (8.1.4) lib/action_controller/metal/rendering.rb:192:in 'ActionController::Rendering#render_to_body'

actionpack (8.1.4) lib/action_controller/metal/renderers.rb:155:in 'ActionController::Renderers#render_to_body'

actionpack (8.1.4) lib/abstract_controller/rendering.rb:28:in 'AbstractController::Rendering#render'

actionpack (8.1.4) lib/action_controller/metal/rendering.rb:173:in 'ActionController::Rendering#render'

actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:31:in 'block (2 levels) in ActionController::Instrumentation#render'

activesupport (8.1.4) lib/active_support/benchmark.rb:17:in 'ActiveSupport::Benchmark.realtime'

actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:31:in 'block in ActionController::Instrumentation#render'

actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:100:in 'ActionController::Instrumentation#cleanup_view_runtime'

activerecord (8.1.4) lib/active_record/railties/controller_runtime.rb:48:in 'ActiveRecord::Railties::ControllerRuntime#cleanup_view_runtime'

actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:30:in 'ActionController::Instrumentation#render'

lib/topic_list_responder.rb:16:in 'block (2 levels) in TopicListResponder#respond_with_list'

actionpack (8.1.4) lib/action_controller/metal/mime_responds.rb:224:in 'ActionController::MimeResponds#respond_to'

lib/topic_list_responder.rb:7:in 'TopicListResponder#respond_with_list'

app/controllers/list_controller.rb:119:in 'block (2 levels) in <class:ListController>'

actionpack (8.1.4) lib/action_controller/metal/basic_implicit_render.rb:8:in 'ActionController::BasicImplicitRender#send_action'

actionpack (8.1.4) lib/abstract_controller/base.rb:221:in 'AbstractController::Base#process_action'

actionpack (8.1.4) lib/action_controller/metal/rendering.rb:199:in 'ActionController::Rendering#process_action'

actionpack (8.1.4) lib/abstract_controller/callbacks.rb:267:in 'block in AbstractController::Callbacks#process_action'

activesupport (8.1.4) lib/active_support/callbacks.rb:121:in 'block in ActiveSupport::Callbacks#run_callbacks'

app/controllers/application_controller.rb:458:in 'block in ApplicationController#with_resolved_locale'

i18n (1.14.8) lib/i18n.rb:354:in 'I18n::Base#with_locale'

app/controllers/application_controller.rb:458:in 'ApplicationController#with_resolved_locale'

activesupport (8.1.4) lib/active_support/callbacks.rb:130:in 'block in ActiveSupport::Callbacks#run_callbacks'

app/controllers/application_controller.rb:1140:in 'ApplicationController#ensure_dont_cache_page'

activesupport (8.1.4) lib/active_support/callbacks.rb:130:in 'block in ActiveSupport::Callbacks#run_callbacks'

activesupport (8.1.4) lib/active_support/callbacks.rb:141:in 'ActiveSupport::Callbacks#run_callbacks'

actionpack (8.1.4) lib/abstract_controller/callbacks.rb:266:in 'AbstractController::Callbacks#process_action'

actionpack (8.1.4) lib/action_controller/metal/rescue.rb:36:in 'ActionController::Rescue#process_action'

actionpack (8.1.4) lib/action_controller/metal/instrumentation.rb:76:in 'block in ActionController::Instrumentation#process_action'

activesupport (8.1.4) lib/active_support/notifications.rb:210:in 'block in ActiveSupport::Notifications.instrument'

activesupport (8.1.4) lib/ac


Также могу сказать, что я нашёл похожие, если не идентичные, записи об ошибках в логах этого инстанса, как и в первом сообщении темы. Там было много этих выводов pitchforks, но они, похоже, больше не появляются, то есть исчезли после обновления сборки несколько дней назад, хотя ситуация остаётся прежней. :thinking:

Я вернулся к своей теме для описания опыта с собственным инстансом, так как проблема так и не была решена, и в этом случае может существовать реальное отличие — https://meta.discourse.org/t/the-git-hang-and-the-admin-mod-user-accs-oops-error-page-error/