Я считаю, что лучший способ сделать это - использовать фоновые задания. Пока ваш рабочий выполняет некоторые длительные задачи, он недоступен для новых запросов. С фоновыми заданиями - они выполняют свою работу, а ваш веб-рабочий может работать с новым запросом.
Вы можете посмотреть на самых популярных фоновой вакансии драгоценные камни для рубина в качестве отправной точки: resque
, delayed_jobs
, sidekiq
UPD: Реализация зависит от выбранного драгоценного камня, но общая схема будет выглядеть следующим образом:
# Controller
post '/items' do
# Processing data
MyAwesomeJob.enqueue # here you put your job into queue
head :ok # or whatever
end
В MyAwesomejob
вы реализуете ваши долгосрочные задачи стереосистеме и обновите
Далее о Mongoid и фоновых заданий. Вы должны никогда использовать сложные объекты в качестве аргументов задания. Я не знаю, какую задачу вы выполняете, но есть общий ответ - используйте простые объекты.
Например, вместо использования User
в качестве аргумента используйте user_id
, а затем найдите его в своей работе. Если вы сделаете это так, вы можете использовать любую БД без проблем.
Спасибо за ответ, не могли бы вы привести пример, как это будет выглядеть в моем случае, я имею в виду возвращение ответа и добавление фоновой работы или наоборот? Спасибо – Putinhello
И еще одна вещь, я использую Mongoid для сохранения объектов, как я могу использовать его или передать объект Sidekiq? – Putinhello
@Putinhello обновил мой ответ – unkmas