Tôi đang sử dụng cuộc gọi lại after_action
trong thư của tôi để ghi lại email đã được gửi. Các email được gửi qua công việc bị trì hoãn. Thao tác này hoạt động, trừ khi chúng tôi không thể kết nối với máy chủ từ xa - trong trường hợp đó, email không được gửi, nhưng chúng tôi ghi lại nó. Công việc bị trì hoãn thử lại email sau đó và nó được gửi thành công, nhưng sau đó chúng tôi đã ghi lại rằng hai email đã được gửi.Phát hiện lỗi gửi thư của người gửi hành động trong các cuộc gọi lại sau cuộc gọi
Nó trông giống như sau:
class UserMailer < ActionMailer::Base
after_action :record_email
def record_email
Rails.logger.info("XYZZY: Recording Email")
@user.emails.create!
end
def spam!(user)
@user = user
Rails.logger.info("XYZZY: Sending spam!")
m = mail(to: user.email, subject: 'SPAM!')
Rails.logger.info("XYZZY: mail method finished")
m
end
end
tôi gọi mã này như thế này (sử dụng delayed job performable mailer):
UserMailer.delay.spam!(User.find(1))
Khi tôi bước qua này trong một trình gỡ lỗi, có vẻ như phương pháp after_action tôi được gọi là trước khi thư được gửi.
[Job:104580969] XYZZY: Sending spam!
[Job:104580969] XYZZY: mail method finished
[Job:104580969] XYZZY: Recording Email
Job UserMailer.app_registration_welcome (id=104580969) FAILED (3 prior attempts) with Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 1025
Làm cách nào tôi có thể gặp lỗi mạng trong phương pháp gửi thư và ghi lại rằng các nỗ lực email không thành công, hoặc không làm gì cả? Tôi đang sử dụng Rails 4.2.4.
Đó không hoạt động. Nó có một chút với công việc trì hoãn xử lý email. Nó gọi phương thức gửi thư của bạn sau đó gọi giao hàng (hoặc deliver_now) trên đó. Vì vậy, việc phân phối thực sự được thực hiện bên ngoài thư rác! phương pháp –
Tôi cũng muốn một cái gì đó hoạt động mà không cần phải nhớ để thực hiện nó trên mỗi phương pháp bưu phẩm hoặc chagne tất cả các phương pháp bưu phẩm hiện tại của tôi (có khoảng 30) –