Ho un'app per i binari in cui ho una funzione che inviano alcune e-mail. Mi piacerebbe farlo asynchronously
e ho pensato che il metodo deliver_later
lo farebbe. Attualmente ho qualche ritardo da quando l'utente fa clic su submit
fino a quando non viene inviato il modulo, il che comporta un'esperienza utente negativa (è una forma piuttosto semplice). La mia implementazione è la seguente:Rails 4 - Mailer deliver_later non sta facendo quello che mi aspetto, blocca l'interfaccia utente
def create
respond_to do |format|
if @competition.save
[...]
send_notification_to_team_members
end
end
def send_notification_to_team_members
@team.members.each do |member|
unless member.user.eql?(current_user)
Mailer.deliver_new_competition_notification(member.user, @competition).deliver_later
end
end
end
Attualmente occorrono ~ 4 secondi per completare l'azione. Ho anche provato:
Mailer.deliver_new_competition_notification(member.user, @competition).deliver_later(wait: 1.minute)
poi ci vuole anche di più - Direi ~ 1 minuto.
Quindi, sto usando erroneamente deliver_later
oppure il metodo non sta facendo quello che mi aspetto. In tal caso, c'è un altro metodo che posso usare per migliorare le mie prestazioni?
Quale backend di activejob stai utilizzando? –
È necessario inviare la posta elettronica in modo asincrono.Se si utilizza 4.2, è possibile utilizzare ActiveJob o, in caso contrario, utilizzare soluzioni come Sidekiq o Rescue. –
FYI: [Here] (https: //blog.engineyard.com/2014/getting-started-with-active-job) è un buon articolo sull'utilizzo di ActiveJob per l'invio di e-mail. –