Каким образом наблюдатели и обратные вызовы Rails могут обрабатываться асинхронно (в другом потоке)?

Наблюдатели и обратные вызовы в моделях Rails работают в одном потоке и блокируют запрос до тех пор, пока они не вернутся.

Например, если у меня есть модель Photo, и я помещаю задание по изменению размера в очередь в обратном вызове after_create или в наблюдателе, запрос не завершится, пока в очереди не будет сделана запись (что иногда может быть медленным, если я использую Amazon SQS для организации очередей).

То же самое верно и для обратных вызовов на контроллерах Rails. Если мне нужно выполнить обслуживание, такое как управление кешем или аналитика хранилища, запрос не завершится, пока не завершится обратный вызов.

Есть ли способ Rails для запуска кода внутри обратного вызова (модель или контроллер) или наблюдателя в другом потоке, чтобы запрос не остановлен?

6
задан Sid 22 February 2011 в 18:59
поделиться