QA@IT

Rails4で重い処理の進捗状況を表示する

5121 PV

Rails4を使いTwitterのユーザーID一覧を取得しようとしてるのですが、
一回の取得で5000件までしか取得できないため何度も取得してくる必要があります。

単純にループを回して必要な件数を取得することはできたのですが、
進捗状況を表示しようとして方法がわからず躓いています。

自分でわかる所まで書いたので何かアドバイスを頂けないでしょうか?

進捗状況を表示するための練習として新しいプロジェクトを作っています。
以下が作業内容になります。

rails new progress_test
rails g scaffold post title text
rake db:migrate
config/routes.rb に以下を追記
  root 'posts#index'
  post 'index' => 'posts#index'

index.html.erbに以下を追記

<%= form_tag('/index', :remote => true) do %>
  <%= text_field_tag :num %>
  <%= submit_tag "長い処理" %>
<% end %>
<div id="progress"></div>

index.js.erbを作成して以下を記述

$("#progress").html("<%= @num %>");

post.rb に以下のメソッドを追加

def long_process(num)
    if num == 0
        return 0
    end
    sleep 1
    return num - 1
end

posts_controller.rb の indexメソッドを変更

  def index
    @posts = Post.all
    @num = params[:num]
    render
  end

post.rb の long_processは使えていません。
Ajaxで値が返ってきた時に数字を表示すると同時にまた処理を呼び出せば動かせる気はするのですが、
具体的にどう書けばよいかわかりませんでした。

一応、上記の内容を行った物をGithubに配置しておきました。
https://github.com/ironsand/progress_test

回答

見当違いならごめんなさい。

同期を取る必要性がないのであれば、 Resqueを使ってみるのはどうでしょうか?

Resqueはバックグラウンドで行われている処理を細分化してGUI(Web画面)で見る事ができます。

編集 履歴 (0)
  • 処理状況をユーザーに表示することを考えてるので同期は必要になります。ただ、このResqueは非常に便利そうですね、情報有り難うございました。使うことがありそうなので使い方を勉強しておくことにします。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。