Alex Rivera | Logout

How to perform some task after render in Rails 3.1

Asked 2011-11-17T12:51:18.643
12

I'm using Impressionist to record page impressions. The database write only takes about 50ms, but I'd really prefer to do it after the page has rendered and been sent to the client.

I've looked into forking via Spawn, but it establishes a new database connection, which seems to be overkill for such a small job. Delayed Job and other background processing libraries seem like major overkill. Writing to the database just to defer writing to the database...not a win.

I wish I could just:

def show
  render
  impressionist(@article)
end

...and have impressionist do its thing with the same database connection and all the same request data as the action, just after the action has already returned to the client. But of course that's not how the render method works.

Any solutions? Running Rails 3.1 and Ruby 1.9.2 on Heroku Cedar.

Edit
Report

1 Answer

6

Spawn a new thread. Heroku will allow you up to 15 threads per dyno.

def show
  render
  Thread.new do
    impressionist(@article)
  end
end
answered 2013-02-19T03:43:34.287

Your Answer