Sidekiq mostra emails de ativação sendo enviados para o endereço de email nil

Olá pessoal incrível,

Tenho um desafio divertido para vocês. Veja o que aconteceu:

  1. Instalei o Discourse usando discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub
  2. Testei o e-mail com o doctor, funciona e os e-mails foram recebidos.
  3. Tentei ativar a conta de administrador e o sidekiq revela isto (com o token ocultado):
    {“type”=>“signup”, “user_id”=>1, “email_token”=>“REDACTED”, “to_address”=>nil, “current_site_id”=>“default”}

Não tenho certeza por que nil é uma coisa para to_address.

Quaisquer dicas, conselhos ou sugestões seriam muito bem-vindas!

Provavelmente consigo encontrar, mas você sabe qual era o nome do job do Sidekiq que disparou o e-mail?

Se você não conseguir acessar o site porque não está recebendo o e-mail de ativação, pode criar um usuário e senha de administrador com rake admin:create. Instruções completas estão aqui: Create an admin account from the console. Isso deve permitir que você faça login no site.

Parece que você ainda precisará resolver o que está acontecendo com a entrega de e-mails.

Desculpe pela resposta atrasada. O job que a acionou foi: Jobs::CriticalUserEmail

Então, segui o guia exatamente. Quando chegou a hora de registrar a conta de administrador, ele não enviou um e-mail, e Jobs::CriticalUserEmail continha {“type”=\u003e“signup”, “user_id”=\u003e1, “email_token”=\u003e“REDACTED”, “to_address”=\u003enil, “current_site_id”=\u003e“default”}.

Eu forcei a conta de administrador apenas para ver quais eram os problemas. O resultado é o seguinte:

  • O Doctor funciona e o e-mail é recebido
  • O teste de Digest funciona e o e-mail é recebido tanto na versão HTML quanto na versão Plain
  • Qualquer registro não envia e-mail, e o log de e-mails na seção de administração nem sequer mostra uma mensagem de que um e-mail foi enviado.

Sempre que um usuário tenta se registrar, o resultado é o mesmo:
Jobs::CriticalUserEmail continha {“type”=\u003e“signup”, “user_id”=\u003e2, “email_token”=\u003e“REDACTED”, “to_address”=\u003enil, “current_site_id”=\u003e“default”}.

A cauda de /var/discourse/shared/standalone/log/rails/production.log mostra (com redações):

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

No log, ele mostra e-mail preciso para os parâmetros de registro, mas o sidekiq ainda relata “to_address”=\u003enil

Há algum erro na página de Logs de Erro do seu site? Essa página está em /logs. Você pode acessá-la a partir da barra lateral do administrador clicando na entrada Segurança / Logs de Erro.

Oh interessante. Recebo isto:

Você consegue acessar a interface web do Sidekiq em /sidekiq? Se sim, há algum erro sendo reportado nessa página?

Eu sou, mas o que eu recebo é isto:

Tente clicar na aba "Enqueued". É um link.

Eu recebo isto:

Que é onde descobri a coisa address_to=nil.

Há algo errado com o Redis e/ou Sidekiq. Há alguns outros membros deste fórum que podem ter ideias sobre como depurar o problema.

Eu estaria tentado a fazer SSH no servidor e executar:

cd /var/discourse
./launcher rebuild app

Não faria mal neste momento.

Sim, já fiz isso várias vezes, por isso vim perguntar.

Já fiz uma reconstrução. Já fiz até uma instalação completamente nova.

Parece acontecer em todas as instalações. Não importa o quê. E agora estou perdido.

E sou incrivelmente grato pelo que você tentou me ajudar.

Isso é surpreendente. Certifique-se de que está seguindo todas as etapas descritas aqui: . discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub.

Além disso, certifique-se de que o servidor em que você está instalando o Discourse atende aos requisitos descritos aqui: discourse/docs/INSTALL.md at main · discourse/discourse · GitHub.

Seria ótimo resolver o que está dando errado.

Posso fornecer o processo exato que usei. Talvez algo no processo que estou fazendo esteja errado. Estou totalmente disposto a aceitar que estou cometendo um erro em algum lugar!

  1. Tenho um domínio. É discourse.domain.dev (domínio obviamente omitido)
  2. Tenho uma conta de e-mail configurada. Tenho uma conta Mailgun, então configurei um novo usuário para SMTP. O e-mail é discourse@discourse.domain.dev
  3. Tenho um servidor. É o Ubuntu mais recente (Jammy Jellyfish)
  4. apt install docker.io - Nenhum
  5. O Git já estava instalado
  6. O usuário era root
  7. Clonei usando git clone https://github.com/discourse/discourse_docker.git /var/discourse
  8. Naveguei para cd /var/discourse
  9. chmod 700 containers
  10. ainda usuário root
  11. executei ./discourse-setup
  12. Preenchi as informações conforme solicitado: discourse.domain.dev
  13. E-mail de Administrador do Discourse: meu@personal.email
  14. SMTP: smtp.eu.mailgun.org
  15. PORTA SMTP: 587
  16. nome de usuário: noreply@discourse.domain.dev
  17. senha do usuário: REDIGIDO
  18. e-mail de notificação: noreply@discourse.domain.dev
  19. E-mail do Let’s Encrypt: meu@personal.email
  20. ID Maxmind: Coloquei
  21. Chave de Licença Max Mind: Coloquei
  22. Verifiquei os dados de entrada para a configuração.
  23. Pressionei Enter.
  24. Esperei.
  25. Esperei mais um pouco
  26. Fiz um café
  27. Última linha do processo de 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=meu@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=meu@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 REDACTGED local_discourse/app /sbin/boot
    REDIGIDOSTRINGLONGA`
  28. Executei ./discourse-doctor. Falhou porque não conseguiu se conectar ao redis.
  29. Executei ./launcher rebuild app e não mudei nada na configuração
  30. Construiu. Tudo ok. A única diferença foi a última string longa omitida.
  31. Executei ./discourse-doctor. Recebi o e-mail de teste dele.
  32. O site estava no ar, então fui criar uma conta de usuário para o administrador.
  33. Cliquei em Registrar
  34. Disse que estava enviando um e-mail de notificação.
  35. Nenhum recebido.
  36. Verifiquei através de ./discourse-docter e vi isto:
    Versão do Discourse em discourse.domain.dev: NÃO ENCONTRADA Versão do Discourse em localhost: NÃO ENCONTRADA
  37. Executei ./launcher enter app
  38. Executei rake admin:create
  39. Coloquei e-mail: meu@personal.email
  40. Redefini a senha, pois o usuário já existe
  41. Dito “Sua conta agora tem privilégios de administrador!”
  42. Fiz login no site no domínio
  43. Vá para discourse.domain.dev/logs - veja "Teste de heartbeat do Sidekiq falhou, reiniciando`
  44. Vá para discourse.domain.dev/sidekiq: Veja:
  45. Vá para visualizar Enfileirado
  46. Clique em “critical” e expanda o conteúdo e veja “to_address”=nil novamente.

Pare, e entre em contato.

Esta é uma refação completa em uma nova máquina hoje. Estes são os mesmos passos EXATOS que usei antes. Por favor, se eu errei, me avisem! :pray:


Configuração do Sistema:

  • CPU: 4 Cores
  • RAM: 16 GB
  • SO: Ubuntu LTS 64bit 24.04
  • Armazenamento: NVMe 500G
  • Versão do Postgres: 13.16-1
  • Redis: 7.0.7
  • Ruby: 3.3.4