activerecord update progress bar

Hi,

I have a button that links to a controller which is updating all my entries in my db with new data, called from an external xml-based web service. That can take several minutes, so I want to show the actual progress in the view.

What is the best approach to do that? Java, AJAX...???

I found many 'upload progress bars', but I don't want to upload a file.

I don't need a bar, it would be enough to show how many records are left for updating, like this:

1/37 ... 11/37 ... 25/37 ... 37/37 done!

Best way would be without refreshing the page!

Thanks in advance! Sebastian

You hand the task over to a background server, whichever flavor you prefer (Nanite+Redis, Beanstalkd, …). This means you can keep on serving other requests while the task is being done, as well as having your user browse to another page (and when he requests the status page, you just fetch the current progress).

There’s several ways you can pass the progress to the view:

  • Periodical polling through Ajax

  • Some push server technology (there’s a Railscast at http://railscasts.com on this subject)

Best regards

Peter De Berdt

Thank you Peter for your reply!

I will look into that deeper, but I think first I have to get my method run in the background.

I found delayed_job and I think that is exactly what I need, but I can't get it to work!!!

My method in my controller looks like this:

  def check     @watchedfamily = Check.new(params[:id]).watchedfamily     redirect_to watchedfamilies_path   end

That calls a very large model called Check, which looks like this:

class Check   attr_reader :watchedfamily   def initialize(id)     @watchedfamily = Watchedfamily.find(id)      .....      ....   end end

I already tried in my controller:

Check.new(params[:id]).delay or Delayed::Job.enqueue(Check.new(params[:id]))

For the second try I changed my Check-Model like this:

class Check < Struct.new(:id)   def perform     @watchedfamily = Watchedfamily.find(id)      .....      ....   end end

Nothing worked at all! With the last option I get a entry in my delayed_jobs table at least, but its never executed. I also tried "rake jobs", but there I get an error: rake aborted! Don't know how to build task 'jobs'

I am in development and using WebBrick Server.

I really have no clue how to get this to work!!!

Kind regards Sebastian

Now I got it!

I was watched the railcast episode about delayed_job and there nobody told that in the background runs: rake jobs:work or something else to run the jobs from the list!!!

Now I will look into AJAX to get an update process bar or something...