Как запустить почтовую программу только после перенаправления пользователя в контроллере?

Например, если почтовик 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)

чтобы ваша электронная почта доставлялась в фоновом режиме.

Другие вопросы по тегам