Новое в Rails 4: безопасное использование многопотового кода по умолчанию
Большое изменение в Rails 4 - то, что приложения теперь ориентированы на многопотоковое исполнение по умолчанию. Это дает огромные выигрыши в производительности приложений, поскольку они будут в состоянии обслуживать больше чем один запрос одновременно.
Ориентированный на многопотоковое исполнение код
Если Вы используете рабочий веб-сервер, который допускает параллелизм, такой как Puma, Вы должны гарантировать, что весь Ваш код ориентирован на многопотоковое исполнение, включая все gem-ы которые использует ваше приложение. Вы должны быть уверены, что каждый gem, включенный в Ваш проект, ориентирован на многопотоковое исполнение.
Как только все gem-ы будут проверены на корректное исполнение многопотокового кода, следующий шаг - изучить Ваш собственный код проекта. Просмотрите свое приложение в поисках совместно используемых частей кода, таких как:
- переменные класса
 - константы
 - глобальные переменные
 
Вот пример кода многопотокового исполнения долгого конкурентного вычисления, используя Mutex:  
class SomeClass
  @lock = Mutex.new
  class << self
    def some_calculation
      @lock.synchronize do
        @calc ||= heavy_operation
      end
    end
  end
end
Используемый веб-сервер
Если Вы используете веб-сервер, такой как Unicorn, даже если Ваше приложение ориентированно на многопотоковое исполнение, то все запросы будут все еще работать в изоляции. Каждый рабочий процесс выполняет единственный поток за один раз. Однако, поскольку Rails теперь ориентировано на многопотоковое исполнение по умолчанию, у Вас нет необходимости включения в ваш код middleware Rack::Lock в каждом запросе.
Rails будет автоматически включать Rack::Lock, если ваше приложение исполняется на многопотоковом веб-сервере, таком как WEBrick.