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.

6 curtidas

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

1 curtida

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.

1 curtida

Oh interessante. Recebo isto:

1 curtida

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

1 curtida

Eu sou, mas o que eu recebo é isto:

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

1 curtida

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.

1 curtida

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.

1 curtida

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.

3 curtidas

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
1 curtida