Javascript heroku:向heroku发布数据时如何避免超时

Javascript heroku:向heroku发布数据时如何避免超时,javascript,ruby-on-rails,ruby,ajax,heroku,Javascript,Ruby On Rails,Ruby,Ajax,Heroku,我在heroku上有一个ROR应用程序。该应用程序上有8个可选文本字段,用户可以根据自己的要求填充或让其为空 用户填写的文本字段越多,我的应用程序需要执行的进程就越多。如果填写的字段超过5个,我的应用程序将处理该请求30秒以上,并将导致Heroku超时 有解决这个问题的办法吗 我听说使用javascript和ajax可以将请求分为两部分,我认为这样可以避免超时问题。但是,我不知道怎么做 谢谢 从用户的角度来看,这样的延迟是不可接受的 您应该使用Resque或DelayedJob将表单处理委托给工

我在heroku上有一个ROR应用程序。该应用程序上有8个可选文本字段,用户可以根据自己的要求填充或让其为空

用户填写的文本字段越多,我的应用程序需要执行的进程就越多。如果填写的字段超过5个,我的应用程序将处理该请求30秒以上,并将导致Heroku超时

有解决这个问题的办法吗

我听说使用javascript和ajax可以将请求分为两部分,我认为这样可以避免超时问题。但是,我不知道怎么做


谢谢

从用户的角度来看,这样的延迟是不可接受的


您应该使用Resque或DelayedJob将表单处理委托给工作人员。

您只需将处理作为后台作业即可。在Heroku上,这非常简单。使用Resque+Redis,但也可以使用DelayedJob。(由github构建)是Redis(键值存储)之上的排队层。它比使用DelayedJob排队更容易扩展,但两种方法都有效

  • 首先,安装免费的Heroku
  • 然后只需按照Redis To Go设置宝石之类的东西
  • 设置完成后,您只需执行以下操作:

  • 发布表单数据
  • 将其保存为未处理,以便以后处理
  • 告诉Resque您已将某些内容添加到队列中
  • 如果您的表单是用户创建表单,则代码可能如下所示:

    module SaveUser
      @queue = :save_user
    
      def perform(attributes = {})
        user = User.create(attributes)  
        user.process! if user && !user.processed_everthing?
      end
    end
    
    def create
      Resque.enqueue(SaveUser, params[:user])
    end
    
    …您也可以按如下方式编写它(仅在队列中存储
    id
    ,而不是参数)

    通过排队,用户几乎可以立即进入下一页


    但是,如果用户需要立即在下一页上查看处理结果,您只需想办法解决其他问题。

    您提交的表单中填写了8个字段中的5个,而服务器正在超时?您对表单数据做了什么?衷心感谢!我认为你的建议会有帮助。但是,当我按照指令执行cmd:$rake resque:work QUEUE=*时,出现了一些问题:Hu Brians MacBook:nextpttt Brian$rake resque:work QUEUE=*--trace rake中止!请安装yajl-ruby或json-gem我该怎么做?谢谢
    module SaveUser
      @queue = :save_user
    
      def perform(id)
        user = User.find(id)
        user.process! if user && !user.processed_everthing?
      end
    end
    
    def create
      user = User.create(params[:user])  
      Resque.enqueue(SaveUser, user.id)
    end