Is Rails (3.2/4.0) thread safe? Are most gems? For app code, presumably you'd have to avoid class variables and class instance variables. Anything else?
Rails 4 is. It turns on thread safe mode by default
> Are most gems?
Usually. I haven't had any problems with that myself
> For app code, presumably you'd have to avoid class variables and class instance variables
yeah thats quite a bit of it.
But yes, in Rails 4 that's the default mode, for Rails to allow concurrent overlapping requests. Meaning Rails 4 assumes by default that any local or gem code is thread-safe (may or may not be a safe assumption of course).
Both Rails 3.2 and Rails 4 (and really older Rails for quite some time) are intended and architected to be thread-safe. Modulo bugs. There were concurrency bugs in older versions for sure, which we know because so many of them have been fixed.
Rails have been thread-safe for quite some time (yehuda says after fall 2008, so even before the whole merb merger thing).
(see http://yehudakatz.com/2010/08/14/threads-in-ruby-enough-alre... comment section)
There really is such a huge performance advantage to a multi-threaded deploy environment -- EVEN with MRI, for the typical I/O-bound webapp, although you'd definitely want both multi-process and multi-threaded under MRI GIL. (Both puma and passenger enterprise can give you this, although not passenger free).
I'm hoping people start to catch on to this, and multi-threaded app servers get more popular, making them more mature and feature-rich, and in turn flushing out remaining bugs in Rails, causing yet more interest in multi-threaded deploy environment, virtuous circle blah blah
I'm not trying to nitpick, I just don't want anyone getting the impression this isn't true under jruby or rubinius.