Вам необходимо четко определить свою логику очередей - в вашем случае назначать задачи, если я прав. Любая параллельная система определенно должна пройти цикл получения блокировки и освобождения блокировки объекта или объекта, с которым выполняется действие. В мире Rails каждый запрос, который вы делаете из браузера, является запросом, который выполняется в отдельном потоке или процессе. Они все еще могут мчаться и бороться за ресурс. Таким образом, это зависит от вас, чтобы определить это разрешение конфликта.
Один из способов сделать это - использовать прикладную переменную, получающую блокировку и использующую: синхронизация вокруг метода ( source ).
class SharedCache
@@lock = Mutex.new
def expire
...
end
synchronize :expire, :with => :@@lock
end