Новые пользователи не могут зарегистрироваться, в консоли ошибки 404

Не уверен, является ли это ошибкой или проблемой с моей конфигурацией.

Когда я пытаюсь создать нового пользователя через регистрацию с использованием Discourse ID, этап проверки Discourse ID проходит успешно, но при возврате на мой инстанс keppari.discourse.diy регистрация завершается неудачей без каких-либо уведомлений, даже если в браузере уже выполнен вход с подтверждённым Discourse ID адресом электронной почты. Кнопка регистрации отображается, но при нажатии ничего не происходит, и предупреждений на странице нет. Ранее мне удавалось создавать других пользователей с помощью Discourse ID.

В настройках входа и аутентификации я изменил только два параметра: отключил двухфакторную аутентификацию (2FA) и разрешил использование Discourse ID. Я использую собственную хостинг-инфраструктуру, и SMTP у меня не настроен. Между созданием предыдущих пользователей и этой попыткой я временно отключил локальный вход, так как думал, что из-за отсутствия настроенного SMTP форма входа может быть запутанной, но сейчас локальный вход снова включён.

Не уверен, связано ли это с проблемой, но в консоли для всех просмотров страниц анонимными пользователями наблюдается множество ошибок 404 для моих плагинов, а также для /assets/vendor.map и assets/start-discourse.map. У авторизованного пользователя этих ошибок в консоли нет. В моём логе /logs ничего нового я не обнаружил.

Буду признателен за любые рекомендации по другим настройкам, которые стоит изменить, если это ошибка с моей стороны! Я использую собственную хостинг-инфраструктуру, версия 2026.3.0-latest.

Итак, пользователь застрял на экране регистрации с неактивной кнопкой? Можете ли вы поделиться скриншотом? Есть ли какие-либо ошибки в вашем файле /logs?

1 лайк

Кнопка регистрации даже не отключена — она активна, но при нажатии ничего не происходит. Первый скриншот ниже сделан до попытки нажать «Регистрация», но после нажатия он выглядит точно так же.

Вот мои текущие логи; попытка регистрации была предпринята в 10:25. Сначала я думал, что в логах нет ошибок, но эти ошибки, появившиеся к 10:25, новые.

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

1 лайк

Да, пожалуйста, опубликуйте трассировку стека и переменные окружения для ошибки can’t alloc thread, которая, похоже, вызывает проблемы на вашем экземпляре.

1 лайк

Вот трассировка стека для последней ошибки can't alloc thread:

Сообщение (159137 копий)

Исключение задачи: can't alloc thread

Трассировка стека

/usr/local/lib/ruby/3.4.0/socket.rb:712:in 'Thread.new'
/usr/local/lib/ruby/3.4.0/socket.rb:712:in 'block in Socket.tcp_with_fast_fallback'
/usr/local/lib/ruby/3.4.0/socket.rb:710:in 'Array#map'
/usr/local/lib/ruby/3.4.0/socket.rb:710:in 'Socket.tcp_with_fast_fallback'
/usr/local/lib/ruby/3.4.0/socket.rb:661:in 'Socket.tcp'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client/ruby_connection.rb:122:in 'RedisClient::RubyConnection#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client/ruby_connection.rb:48:in 'RedisClient::RubyConnection#initialize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:815:in 'Class#new'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:815:in 'block in RedisClient#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client/middlewares.rb:12:in 'RedisClient::BasicMiddleware#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:814:in 'RedisClient#connect'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:800:in 'RedisClient#raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:759:in 'RedisClient#ensure_connected'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-client-0.26.1/lib/redis_client.rb:352:in 'RedisClient#call_v'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis/client.rb:90:in 'Redis::Client#call_v'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in 'block in Redis::Client#profile_method'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis.rb:152:in 'block in Redis#send_command'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis.rb:151:in 'Monitor#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis.rb:151:in 'Redis#send_command'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/redis-5.4.0/lib/redis/commands/keys.rb:256:in 'Redis::Commands::Keys#del'
/var/www/discourse/lib/discourse_redis.rb:168:in 'block in DiscourseRedis#del'
/var/www/discourse/lib/discourse_redis.rb:29:in 'DiscourseRedis.ignore_readonly'
/var/www/discourse/lib/discourse_redis.rb:165:in 'DiscourseRedis#del'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/distributed_mutex.rb:48:in 'MiniScheduler::DistributedMutex#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/distributed_mutex.rb:15:in 'MiniScheduler::DistributedMutex.synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:365:in 'MiniScheduler::Manager#lock'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:316:in 'MiniScheduler::Manager#tick'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler.rb:74:in 'block (2 levels) in MiniScheduler.start'

Это ещё один

Сообщение (2661 копий)

Исключение задачи: can't alloc thread

Трассировка стека

/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in 'Thread.new'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in 'block in MiniScheduler::Manager::Runner#ensure_worker_threads'
<internal:numeric>:257:in 'Integer#times'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in 'MiniScheduler::Manager::Runner#ensure_worker_threads'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:23:in 'block (2 levels) in MiniScheduler::Manager::Runner#initialize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:20:in 'Thread::Mutex#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:20:in 'block in MiniScheduler::Manager::Runner#initialize'

Я использую droplet Digital Ocean с 1 ГБ памяти, пока настраиваю систему, на случай если это имеет значение. Я знаю, что это не рекомендуемый размер, но не думал, что это вызовет проблемы, если нет реального трафика, кроме моего.

Привет! Я попытался посмотреть на это с точки зрения обычного пользователя: я перехожу к регистрации через Discourse ID, и мне показывается подсказка, как только поле

заполнено. Я нажимаю «Зарегистрироваться», кнопка нажимается, но не выполняет то, что должна.

Это ошибки консоли для анонимного пользователя на странице /signup и на всех остальных страницах:

[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-lazy-videos.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (poll.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (vendor.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-local-dates.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (checklist.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (spoiler-alert.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-rewind.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-calendar.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-staff-alias.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-topic-voting.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-narrative-bot.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (automation.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (start-discourse.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-details.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-user-notes.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-data-explorer.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-anonymous-categories.map, строка 0)
[Ошибка] Не удалось загрузить ресурс: сервер ответил со статусом 404 () (discourse-fingerprint.map, строка 0)

Вас предупредили о моей попытке регистрации?

Также хотите, чтобы я зарегистрировался без ID, чтобы проверить, сработает ли это?

Нет, я не вижу нового пользователя и никаких уведомлений не получил. Спасибо, что попробовали.

1 лайк

Я не думаю, что non-ID сработает, так как у меня не настроен SMTP.

1 лайк

Я выполнил пересборку на случай, если это что-то поможет, но всё ещё получаю ошибки «can’t alloc thread» и проблемы с регистрацией.

Если у вас есть возможность, можете ли вы попробовать установить Discourse заново на новый droplet того же размера? Если вы столкнётесь с той же проблемой, значит, дело именно в размере. (Я тоже могу провести такой тест на droplet с 1 ГБ памяти, но смогу сделать это только через день или два.)

При чистой установке на новый Droplet объемом 1 ГБ у меня нет ошибок, и я успешно вхожу в систему через Discourse ID. Проблемы с моей основной установкой начались только после того, как я отключил, а затем снова включил локальный вход, если это имеет какое-то значение.

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

MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-City.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-City.mmdb
20:00

MaxMindDB (/var/www/discourse/vendor/data/GeoLite2-ASN.mmdb) не найден: No such file or directory @ rb_sysopen - /var/www/discourse/vendor/data/GeoLite2-ASN.mmdb
20:00

(discourse_id) Ошибка аутентификации! access_denied: OmniAuth::Strategies::OAuth2::CallbackError, access_denied | Владелец ресурса или сервер авторизации отклонил запрос.
20:08

Однако установка галочки «Включить локальные входы» снова позволила новым пользователям регистрироваться на чистой установке и устранила ошибки в консоли для анонимных пользователей. Мне не удалось воспроизвести ошибку в логе can't alloc thread.

При включённом ID можно ли сгенерировать учетные данные заново через Администрирование > Вход и аутентификация > Discourse ID?

Я сгенерировал новые учётные данные, но в консоли браузера по-прежнему появляются ошибки 404, и я не могу зарегистрировать новых пользователей. В /logs после генерации новых данных новых ошибок не видно, но я могу выложить их снова, если это поможет.

А, я понял. Похоже, здесь есть отдельная ошибка в конфигурации.

Можете ли вы предоставить список настроек сайта, связанных с входом, и их значения? Конечно, не учётные данные, но мне интересно, как настроен ваш сайт для обработки новых регистраций. (Если вы предпочитаете отправить это в личные сообщения, пожалуйста, делайте это.)

В разделе «Администрирование» > «Вход и аутентификация» у меня от настроек по умолчанию изменено только следующее:

  • отключено «Требовать двухфакторную аутентификацию для внешних провайдеров»;
  • включено использование ID Discourse.

Я ненадолго отключал локальный вход, но сейчас снова его включил.

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

1 лайк

Ах, спасибо за уточнение. У вас есть ссылка на этот плагин? Это было бы очень полезно!

1 лайк