Dec 17 2012

Last night I had some insomnia, so I wrote a gem.

Here it is: https://github.com/steveklabnik/request_store.

TL;DR:

If you’re using Thread.current in your Rails app to store global-ish data, don’t do it! If you use Thin or Puma or a threaded web server, it won’t get reset between requests, and you’ll end up with subtle bugs. So do this instead:

gem "request_store"

and replace

Thread.current[:foo] = 1

with

RequestStore.store[:foo] = 1

And things will be peachy keen.

No Rails?

If you’re not using Rails, use RequestStore::Middleware to make it work. If you are using Rails, a Railtie takes care of it for you.