Sidekiq:アクティベーションメールがnilのメールアドレスに送信されている

素晴らしい皆さん、

面白い問題があります。以下に何が起こったかを説明します。

  1. discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub を使用して Discourse をインストールしました。
  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 を使用して管理者ユーザーとパスワードを作成できます。詳しい手順はこちらをご覧ください:https://meta.discourse.org/t/create-an-admin-account-from-the-console/17274。これによりサイトにログインできるようになるはずです。

ただし、メール配信の問題については、まだ解決する必要があるようです。

「いいね!」 6

返信が遅くなり申し訳ありません。トリガーとなったジョブは 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 と報告しています。

「いいね!」 1

サイトのエラーログページにエラーはありますか?そのページは /logs にあります。管理者のサイドバーで「セキュリティ / エラーログ」エントリをクリックすることでアクセスできます。

「いいね!」 1

面白いですね。私はこれを受け取りました。

「いいね!」 1

/sidekiq から Sidekiq Web インターフェイスにアクセスできますか?もしアクセスできる場合、そのページにエラーは報告されていますか?

「いいね!」 1

しかし、得られたのはこれです。

「Enqueued」タブをクリックしてみてください。リンクです。

「いいね!」 1

これが出ます。

そこで address_to=nil ということを見つけました。

Redis および/または Sidekiq に問題があります。この問題のデバッグ方法についてアイデアを持っている可能性のあるフォーラムのメンバーが他に数名います。

サーバーに SSH 接続して以下を実行したくなります。

cd /var/discourse
./launcher rebuild app

この時点では、害になることはないでしょう。

「いいね!」 1

はい、何度も試しましたが、だからこそ質問に来たのです。

再構築も行いました。完全に新規インストールも行いました。

どのようなインストールでも、毎回発生しているようです。何をやってもです。もうお手上げです。

助けていただこうと試みてくださったことに、心から感謝しています。

「いいね!」 1

それは驚きですね。こちらに記載されているすべての手順に従っていることを確認してください: . discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub.

また、Discourse をインストールしているサーバーが、こちらに記載されている要件を満たしていることを確認してください: discourse/docs/INSTALL.md at main · discourse/discourse · GitHub.

何がうまくいっていないのかを突き止めることができれば幸いです。

「いいね!」 3

プロセスをそのままお伝えできます。もしかしたら、私のやっているプロセスに何か間違いがあるのかもしれません。どこかで間違っていることを完全に認めます!

  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. Discourse 管理者メール: my@personal.email
  14. SMTP: smtp.eu.mailgun.org
  15. SMTPポート: 587
  16. ユーザー名: noreply@discourse.domain.dev
  17. パスワード:編集済み
  18. 通知メール: noreply@discourse.domain.dev
  19. Let’s Encrypt メール: my@personal.email
  20. Maxmind ID:入力しました。
  21. Max Mind ライセンス:入力しました。
  22. セットアップの入力データを検証しました。
  23. Enterキーを押しました。
  24. 待ちました。
  25. さらに待ちました。
  26. お茶を淹れました。
  27. ブートストラッププロセスの最後の行:
    + /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=編集済み -e DISCOURSE_MAXMIND_LICENSE_KEY=編集済み -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 編集済み local_discourse/app /sbin/boot
    編集済み長文字列
  28. ./discourse-doctor を実行しました。Redisに接続できなかったため失敗しました。
  29. ./launcher rebuild app を実行し、設定は何も変更しませんでした。
  30. ビルドされました。すべてOKです。唯一の違いは、最後の編集済み長文字列でした。
  31. ./discourse-doctor を実行しました。テストメールを受信しました。
  32. サイトが起動したので、管理者のユーザーアカウントを作成しに行きました。
  33. 登録をクリックしました。
  34. 通知メールを送信していると表示されました。
  35. 受信しませんでした。
  36. ./discourse-docter で確認したところ、以下が表示されました:
    Discourse version at discourse.domain.dev: NOT FOUND
    Discourse version at localhost: NOT FOUND
  37. ./launcher enter app を実行しました。
  38. rake admin:create を実行しました。
  39. メールを入力しました: 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 GB
  • OS:Ubuntu LTS 64bit 24.04
  • ストレージ:NVMe 500G
  • Postgres バージョン:13.16-1
  • Redis:7.0.7
  • Ruby:3.3.4
「いいね!」 1