控制器花费大量时间导致超时

时间:2012-11-22 02:05:41

标签: ruby-on-rails

我有这样的代码

def validate

  if abc.nil?
    redirect_to :action => 'noInitialSelection'
  else
    redirect_to :action => 'Selection'
    script(params)
  end

end

脚本方法必须处理10000个名称的文件并执行相关工作。现在的问题是代码完成需要花费大量时间,页面没有被重定向到选择并导致500内部服务器错误

我希望将页面重定向到“选择”,以便用户知道他输入了正确的详细信息,然后在后台执行脚本方法

由于

1 个答案:

答案 0 :(得分:1)

您需要查看作业队列以运行script(params)。这有多个宝石;一个非常受欢迎的是 delayed_job

设置delayed_job后,您的方法可能看起来像

def validate
  if abc.nil?
    redirect_to :action => 'noInitialSelection'
  else
    Delayed::Job.enqueue ScriptJob.new(params)
    redirect_to :action => 'Selection'
  end
end

您可以独立创建自定义作业,例如

class ScriptJob < Struct.new(:params)
  def perform
    script(params)
  end
end

enqueue调用将script(params)排入作业队列,以供工作人员处理。