Как запустить почтовую программу только после перенаправления пользователя в контроллере?
Например, если почтовик send_signup_mail
тяжелый и занимает много времени, как я могу сделать sign_in_and_redirect
выполнить сначала и отправить письмо в фоновом режиме после того, как представление было обработано.
В приведенном ниже коде это просто потребовало бы выполнения вещей в линейном порядке, но я предполагаю, что это не то, что на самом деле происходит, поскольку перенаправление не завершается до тех пор, пока письмо не будет отправлено.
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@fb_response = request.env["omniauth.auth"]
@user = User.from_omniauth(@fb_response)
if @user.persisted?
# Update user token
@user.fb_token = @fb_response.credentials.token
# Sign in
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
# Deliver signup mail
UserNotifier.send_signup_email(@user).deliver
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
Спасибо!
1 ответ
Вы должны использовать фоновое задание для отправки электронных писем, чтобы оно не влияло на пользовательский опыт. Я бы посоветовал вам заглянуть в этот драгоценный камень:
Как только вы настроите этот драгоценный камень правильно, вам просто нужно использовать
UserNotifier.delay.send_signup_email(@user)
чтобы ваша электронная почта доставлялась в фоновом режиме.