Sidekiq показывает, что письма активации отправляются на адрес nil

Привет, замечательные друзья,

У меня для вас кое-что интересное. Вот что произошло:

  1. Установил Discourse по инструкции: discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub
  2. Протестировал почту с помощью doctor — всё работает, письма приходят.
  3. Попытался активировать учётную запись администратора, и Sidekiq показал следующее (токен скрыт):
    {“type”=>“signup”, “user_id”=>1, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}

Не понимаю, почему to_address равен nil.

Буду очень признателен за любые советы, рекомендации или предложения!

Я, наверное, смогу найти это, но вы знаете, как называлась задача Sidekiq, которая вызвала отправку письма?

Если вы не можете получить доступ к сайту, потому что не получаете письмо с активацией, вы можете создать пользователя-администратора и пароль с помощью команды rake admin:create. Полная инструкция доступна здесь: Create an admin account from the console. Это должно позволить вам войти на сайт.

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

Извините за задержку с ответом. Задача, которая её вызвала, была: Jobs::CriticalUserEmail.

Я следовал руководству буквально. При регистрации учётной записи администратора письмо не было отправлено, а в Jobs::CriticalUserEmail содержалось: {“type”=>“signup”, “user_id”=>1, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}.

Я принудительно создал учётную запись администратора, чтобы увидеть, какие возникают проблемы. Результат следующий:

  • Тест Doctor работает, и письмо приходит.
  • Тест Digest работает, и письма приходят как в HTML-версии, так и в текстовом виде.
  • При любой регистрации письмо не отправляется, и в логе отправки писем в разделе администратора даже нет записи о том, что письмо было отправлено.

При попытке регистрации любого пользователя результат тот же:
Jobs::CriticalUserEmail содержит {“type”=>“signup”, “user_id”=>2, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}.

В конце файла /var/discourse/shared/standalone/log/rails/production.log показано следующее (с цензурой):

Processing by UsersController#check_username as JSON
  Parameters: {"username"=>"bobo", "email"=>"REDACTED"}
Completed 200 OK in 2ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 636)
Started GET "/session/csrf" for REDACTEDPUBLICIP at 2024-09-26 08:13:03 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 270)
Started POST "/u" for REDACTEDPUBLICIP at 2024-09-26 08:13:03 +0000
Processing by UsersController#create as */*
  Parameters: {"name"=>"JJ", "email"=>"REDACTED", "password"=>"[FILTERED]", "username"=>"bobo", "password_confirmation"=>"[FILTERED]", "challenge"=>"REDACTED", "timezone"=>"Europe/London"}
Completed 200 OK in 335ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 23323)
Started POST "/login" for REDACTEDPUBLICIP at 2024-09-26 08:13:04 +0000
Processing by StaticController#enter as HTML
  Parameters: {"username"=>"bobo", "password"=>"[FILTERED]", "redirect"=>"/u/account-created"}
Redirected to https://REDACTEDDOMAIN/u/account-created
Completed 302 Found in 1ms (ActiveRecord: 0.0ms | Allocations: 507)
Started GET "/u/account-created" for REDACTEDPUBLICIP at 2024-09-26 08:13:04 +0000
Processing by UsersController#account_created as HTML
  Rendered layout layouts/application.html.erb (Duration: 14.0ms | Allocations: 4624)
Completed 200 OK in 21ms (Views: 15.1ms | ActiveRecord: 0.0ms | Allocations: 6821)
Started GET "/sidekiq/queues/critical" for REDACTEDPUBLICIP at 2024-09-26 08:13:15 +0000

В этом логе указаны корректные данные электронной почты в параметрах регистрации, но Sidekiq всё равно показывает “to_address”=>nil.

Есть ли какие-либо ошибки на странице «Журналы ошибок» вашего сайта? Эта страница находится по адресу /logs. Вы можете перейти туда через боковую панель администратора, выбрав пункт «Безопасность / Журналы ошибок».

О, интересно. У меня получается следующее:

Сможете ли вы получить доступ к веб-интерфейсу Sidekiq по адресу /sidekiq? Если да, то отображаются ли на этой странице какие-либо ошибки?

Я, но получаю вот что:

Попробуйте нажать на вкладку «В очереди». Это ссылка.

Я получаю это:

Именно здесь я обнаружил особенность с address_to=nil.

С Redis и/или Sidekiq что-то не так. На этом форуме есть ещё несколько участников, которые, возможно, подскажут, как отладить проблему.

Мне бы хотелось зайти на сервер по SSH и выполнить:

cd /var/discourse
./launcher rebuild app

В любом случае хуже не будет.

Да, я делал это несколько раз, поэтому и обратился с вопросом.

Я выполнил переустановку. Более того, даже полностью чистую установку.

Кажется, это происходит при каждой установке. Без исключений. И сейчас я просто в тупике.

И я невероятно благодарен за то, что вы пытались мне помочь.

Это удивительно. Убедитесь, что вы следуете всем шагам, описанным здесь: . discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub.

Также убедитесь, что сервер, на который вы устанавливаете Discourse, соответствует требованиям, описанным здесь: discourse/docs/INSTALL.md at main · discourse/discourse · GitHub.

Было бы здорово разобраться, что именно идёт не так.

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

  1. Есть домен. Это discourse.domain.dev (домен, конечно, скрыт)
  2. Настроен почтовый аккаунт. У меня есть аккаунт Mailgun, поэтому я создал нового пользователя для SMTP. Адрес электронной почты: discourse@discourse.domain.dev
  3. Есть сервер. Это последняя версия Ubuntu (Jammy Jellyfish)
  4. apt install docker.io — выполнено
  5. Git уже был установлен
  6. Пользователь: root
  7. Клонирование через git clone https://github.com/discourse/discourse_docker.git /var/discourse
  8. Переход в директорию cd /var/discourse
  9. chmod 700 containers
  10. Всё ещё пользователь root
  11. Запуск ./discourse-setup
  12. Ввод данных по запросу: discourse.domain.dev
  13. Email администратора Discourse: my@personal.email
  14. SMTP: smtp.eu.mailgun.org
  15. Порт SMTP: 587
  16. Имя пользователя: noreply@discourse.domain.dev
  17. Пароль пользователя: REDACTED
  18. Email для уведомлений: noreply@discourse.domain.dev
  19. Email для Let’s Encrypt: my@personal.email
  20. ID MaxMind: ввел
  21. Лицензионный ключ MaxMind: ввел
  22. Проверил введенные данные для настройки.
  23. Нажал Enter.
  24. Ждал.
  25. Ждал еще немного
  26. Заварил чай
  27. Последняя строка процесса bootstrap:
    + /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=8 -e UNICORN_SIDEKIQS=1 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_FORCE_HTTPS=true -e LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_HOSTNAME=discourse.domain.dev -e DISCOURSE_DEVELOPER_EMAILS=my@personal.email -e DISCOURSE_SMTP_ADDRESS=smtp.eu.mailgun.org -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=noreply@discourse.domain.dev -e DISCOURSE_SMTP_PASSWORD=b7fc73b0905b5ffb5f70300f1f796000-1b5736a5-0a60075a -e DISCOURSE_SMTP_DOMAIN=discourse.example.com -e DISCOURSE_NOTIFICATION_EMAIL=noreply@discourse.domain.dev -e LETSENCRYPT_ACCOUNT_EMAIL=my@personal.email -e DISCOURSE_MAXMIND_ACCOUNT_ID=REDACTED -e DISCOURSE_MAXMIND_LICENSE_KEY=REDACTED -h devsite -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address REDACTED local_discourse/app /sbin/boot REDACTEDLONGSTRING
  28. Запустил ./discourse-doctor. Ошибка, так как не удалось подключиться к Redis.
  29. Запустил ./launcher rebuild app и ничего не менял в конфигурации
  30. Сборка прошла успешно. Всё в порядке. Единственное отличие — та самая скрытая длинная строка в конце.
  31. Запустил ./discourse-doctor. Я получил тестовое письмо.
  32. Сайт был доступен, поэтому перешел к созданию учетной записи администратора.
  33. Нажал «Регистрация»
  34. Система сообщила, что отправляет уведомление на email.
  35. Письмо не пришло.
  36. Проверил через ./discourse-doctor и увидел следующее:
    Discourse version at discourse.domain.dev: NOT FOUND Discourse version at localhost: NOT FOUND
  37. Запустил ./launcher enter app
  38. Запустил rake admin:create
  39. Ввел email: my@personal.email
  40. Сбросил пароль, так как пользователь уже существует
  41. Получил сообщение: «Ваша учетная запись теперь имеет права администратора!»
  42. Вошел на сайт по домену
  43. Перешел на discourse.domain.dev/logs — увидел сообщение: «Sidekiq heartbeat test failed, restarting»
  44. Перешел на discourse.domain.dev/sidekiq: увидел:
  45. Перешел к разделу «Enqueued»
  46. Нажал на «critical», раскрыл содержимое и снова увидел «to_address»=>nil.

Остановлюсь и обращусь за помощью.

Это полная пересборка на новой машине сегодня. Это ТЕ ЖЕ самые шаги, которые я использовал ранее. Пожалуйста, если я ошибся, дайте мне знать! :pray:


Настройка системы:

  • CPU: 4 ядра
  • RAM: 16 ГБ
  • ОС: Ubuntu LTS 64-бит 24.04
  • Хранилище: NVMe 500 ГБ
  • Версия Postgres: 13.16-1
  • Redis: 7.0.7
  • Ruby: 3.3.4