1

このチュートリアルを使用して、ローンチ前のサインアップ サイトを構築しています。http://railsapps.github.com/tutorial-rails-prelaunch-signup.html . ユーザーが電子メールを入力して招待をリクエストすると、ajax を使用して_thankyou.html、オーバーライドされた Devise 登録コントローラーからレンダリングされるパーシャルをレンダリングします。

ただし、サイトはafter_create :send_welcome_emailコールバックを使用して、「招待をリクエストしていただきありがとうございます」というウェルカム メールを送信します。これにより、ajax のパフォーマンスが大幅に低下します。after_create コールバックがなければ、(少なくともローカル ホストでは) ajax は非常に高速に動作し、フォームはすぐに消え、感謝のパーシャルはほぼ瞬時にレンダリングされます。ただし、after_create コールバックを含めると、フォームが消えるまでに長い時間がかかり (ユーザーが送信ボタンを複数回クリックして、さらに多くの問題が発生します)、thankyou パーシャルにも長い時間がかかります...

お礼のパーシャルがレンダリングされた後にメールがトリガーされるように調整する方法はありますか?

新しいデバイスの作成方法

 # ovverride #create to respond to AJAX with a partial
  def create
    build_resource

    if resource.save
      if resource.active_for_authentication?
        sign_in(resource_name, resource)
        (render(:partial => 'thankyou', :layout => false) && return)  if request.xhr?
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        expire_session_data_after_sign_in!
        (render(:partial => 'thankyou', :layout => false) && return)  if request.xhr?
        respond_with resource, :location => after_inactive_sign_up_path_for(resource)
      end
    else
      clean_up_passwords resource
      render :action => :new, :layout => !request.xhr?
    end
  end

リクエストの招待送信でトリガーされる ajax。

// use AJAX to submit the "request invitation" form
  $('#invitation_button').live('click', function() {
    var email = $('form #user_email').val();
    var password = $('form #user_password').val();
    var dataString = 'user[email]='+ email + '&user[password]=' + password;
    $.ajax({
      type: "POST",
      url: "/users",
      data: dataString,
      success: function(data) {
        $('#request-invite').html(data);
      }
    });
    return false;
  });
4

1 に答える 1

2

私の推測では、電子メールの送信に最も時間がかかると思います。delayed_job またはその他のバックグラウンド処理を使用して実際の電子メールの送信を行ってみてください。バックグラウンド プロセス

https://github.com/collectiveidea/delayed_job

于 2012-05-12T16:52:11.970 に答える