Ajax + Rails не работает на Heroku

0

У меня есть всплывающая форма входа, которая отображает сообщения об ошибках в теле формы через jQuery Ajax. Он отлично работает в моей локальной среде (PostGresQL, WEBbrick), но не на Heroku. На Heroku пользователь перенаправляется на новую страницу, на которой отображается только сообщение об ошибке, то есть {"error": "Invalid Email Address: [email protected]"}

На странице есть две формы регистрации: одна, которая появляется через jQuery Dialog, а другая - на странице. Спасибо за любую помощь.

Здесь контроллер: класс MailingListController <ApplicationController

 respond_to :json

 def create
   gb = Gibbon.new(Settings.mailchimp.api_key)
   res = gb.list_subscribe({:id => Settings.mailchimp.list_id, :email_address => params[:email]})
   if res == true
     render(:json => {:body => "okay"})
   else
     render(:json => {:error => res["error"]})
   end
 rescue
   render(:json => {:error => "Fatal Error"})
  end
end

Здесь js (я знаю, дублирующий код, я просто пытаюсь заставить его работать):

  // Mailing List Watcher
 var mailingList2 = $("#mailing-list2");
 if ( mailingList2.length ) {
   mailingList2
     .live("completed", function(e){
     })
     .live("success", function(e){
       var that = this;
       $.cookie("mailingListSubmitted", "true", {expires: 7});
       if(mailingList2.find("#mailing-list2 #status2").length == 0){
         mailingList2
           .find("form input[type='text']")
           .after($("<div></div>").attr({id : "status2"}))
       }
       mailingList2
         .find("form input[type='text']")
           .attr("disabled", true)
           .fadeOut(5000);
       $("#mailing-list2 #status2")
         .text("Email submitted successfully!")
         .effect("highlight", { }, 1000);
     })
     .live("failure", function(e, error){
      if(mailingList2.find("#mailing-list2 #status2").length == 0){
         mailingList2
           .find("form input[type='text']")
           .after($("<div></div>").attr({id : "status2"}))
       }
       $("#mailing-list2 #status2")
         .text(error)
         .effect("highlight", {}, 1000);
     })
     .live("submittal", function(e, emailAddress){
       if ( emailAddress == "" || emailAddress == null ) {
         $(this).trigger("failure", ["You need to specify an email address!"])
         return false;
       }
       var token = $.token();
       $.post("/mailing_list", {email: emailAddress, authenticity_token: token}, function(response, status, xhr){
         if(response.error){
           $(mailingList2).trigger("failure", ["An error occurred: " + response.error]);
         } else {
           $(mailingList2).trigger("success");
         }
       }, "json")
       .error(function(){
         $(mailingList2).trigger("failure", ["An error occurred. Please try again in a few minutes."]);
       });
     });


   mailingList2.find("form").submit(function(){
     emailAddress = mailingList2.find("input[name='email']").val();
     $(mailingList2).trigger("submittal", [emailAddress]);
     return false;
   });

   var mlSetting = $.cookie("mailingListSubmitted");
   if ( mlSetting == "true" ) {
     mailingList2.remove();
   }
 }

 // Mailing List Watcher
 var mailingList = $("#mailing-list");
 if ( mailingList.length ) {
   mailingList
     .live("completed", function(e){
     })
     .live("success", function(e){
       var that = this;
       $.cookie("mailingListSubmitted", "true", {expires: 7});
       if(mailingList.find("#status").length == 0){
         mailingList
           .find("form input[type='text']")
           .after($("<div></div>").attr({id : "status"}))
       }
       mailingList
         .find("form input[type='text']")
           .attr("disabled", true)
           .fadeOut(5000);
       $("#status")
         .text("Email submitted successfully!")
         .effect("highlight", { }, 1000);
     })
     .live("failure", function(e, error){
      if(mailingList.find("#status").length == 0){
         mailingList
           .find("form input[type='text']")
           .after($("<div></div>").attr({id : "status"}))
       }
       $("#status")
         .text(error)
         .effect("highlight", {}, 1000);
     })
     .live("submittal", function(e, emailAddress){
       if ( emailAddress == "" || emailAddress == null ) {
         $(this).trigger("failure", ["You need to specify an email address!"])
         return false;
       }
       var token = $.token();
       $.post("/mailing_list", {email: emailAddress, authenticity_token: token}, function(response, status, xhr){
         if(response.error){
           $(mailingList).trigger("failure", ["An error occurred: " + response.error]);
         } else {
           $(mailingList).trigger("success");
         }
       }, "json")
       .error(function(){
         $(mailingList).trigger("failure", ["An error occurred. Please try again in a few minutes."]);
       });
     });


   mailingList.find("form").submit(function(){
     emailAddress = mailingList.find("input[name='email']").val();
     $(mailingList).trigger("submittal", [emailAddress]);
     return false;
   });

   var mlSetting = $.cookie("mailingListSubmitted");
   if ( mlSetting == "true" ) {
     mailingList.remove();
   }
}
  • 0
    Вы можете разместить в стеке трассировку ошибки? Ошибка больше связана с вашей конфигурацией среды, а не с кодом JavaScript.
Теги:
heroku

2 ответа

0

Ответ здесь, и хотя я читал это ранее, потребовалось несколько попыток заставить это работать: https://devcenter.heroku.com/articles/pgbackups#exporting-via-a-backup

0

Ваша среда /production.rb неправильно настроена для отправки электронной почты. Вы должны убедиться, что он настроен для отправки электронной почты в качестве домена, который у вас есть. У Rails и Heroku есть хорошие статьи по этому вопросу.

  • 0
    На самом деле, на одной странице есть две почти идентичные формы регистрации, и ajax работает с одной, но не с другой. Тот, который не работает, находится в диалоговом окне jquery.ui, но в остальном они одинаковы и оба работают в моем локальном окружении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню