2012-11-22 47 views
0

我有這樣控制器服用大量的時間導致超時

def validate 

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

end 

腳本方法的代碼必須處理的10000名的文件,並做好相關工作。現在的問題是,代碼需要很長時間才能完成,頁面沒有被重定向到選擇並導致500內部服務器錯誤

我希望頁面被重定向到「選擇」,以便用戶知道他已經進入正確的細節,然後執行腳本方法在後臺

感謝

回答

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)自定義作業到作業隊列進行處理工人。