При первой регистрации по электронной почте с использованием последнего образа Docker мой SMTP-сервер отвечает:
Unexpected return code 554 (expected 250):
“Access denied: User `arn:aws:iam::[acct]:user/[user]' is not authorized to perform `ses:SendRawEmail' on resource `arn:aws:ses:us-west-1:[acct]:identity/[identity]'”.
Однако в файле логов Discourse production.log отображается следующее:
Started PUT "/finish-installation/resend-email" for [ip] at 2020-11-16 20:58:10 +0000
Processing by FinishInstallationController#resend_email as HTML
Parameters: ...
Completed 200 OK in 23ms (Views: 6.4ms | ActiveRecord: 0.0ms | Allocations: 6023)
...
Delivered mail [randid]@[hostname] (191.3ms)
Мне кажется, что сайт, или по крайней мере логи, должны возвращать ошибку, а не сообщение об успехе.
Как правило, письма отправляются в фоновой очереди, поэтому для пользователя это незаметно.
Однако я не против сделать мастер установки чуть более заметным и информативным при возникновении ошибок, но для этого потребуется опрашивать сервер. Это, вероятно, довольно значительное изменение, я пока не уверен.
Для мастера: нормально, если мастер не отображает ошибку. Однако он также не должен указывать, что письмо отправлено успешно. Более правдивое сообщение было бы полезнее. Если слишком сложно отображать статус возврата, лучше написать: «Регистрационное письмо успешно добавлено в очередь. Проверьте статус в /path/to/log».
Для лога: поток-исполнитель должен записывать статус, особенно при возникновении ошибки. Я не знаком с архитектурой, но не вижу ничего полезного в «unicorn.stderr.log» или где-либо ещё. Что-то перехватывает код возврата и сообщение об ошибке…
После входа администратора ошибки электронной почты отображаются в консоли администратора, что указывает на их хранение в базе данных. Они могли быть доступны через базу данных до завершения первой регистрации администратора.
Таблица skipped_email_logs содержит информацию, которую я искал.
Если вы вошли в контейнер Discourse как пользователь discourse, вы можете выполнить:
psql discourse -c "select * from skipped_email_logs"