Вам просто нужно выполнить обработку в качестве фонового задания. На Heroku это супер просто. Используйте Resque + Redis, но вы также можете использовать DelayedJob. Resque (созданный github) - это слой очередей поверх Redis (хранилище значений ключей). Гораздо проще масштабировать, чем делать очереди с DelayedJob, но в любом случае работает.
- Сначала установите бесплатное дополнение Heroku Redis to Go .
- Затем просто следуйте инструкциям Redis To Go Resque with Redis в блоге Heroku , чтобы настроить драгоценные камни и тому подобное.
После настройки вот все, что вам нужно сделать:
- Разместите данные формы.
- Сохраните его необработанный для последующей обработки.
- Сообщите Resque, что вы добавили что-то в очередь.
Если ваша форма является формой создания пользователя, код может выглядеть следующим образом:
module SaveUser
@queue = :save_user
def perform(attributes = {})
user = User.create(attributes)
user.process! if user && !user.processed_everthing?
end
end
def create
Resque.enqueue(SaveUser, params[:user])
end
… вы также можете написать это следующим образом (сохраняя в очереди только id
, а не параметры)
module SaveUser
@queue = :save_user
def perform(id)
user = User.find(id)
user.process! if user && !user.processed_everthing?
end
end
def create
user = User.create(params[:user])
Resque.enqueue(SaveUser, user.id)
end
Поставив все в очередь, пользователь почти сразу попадет на следующую страницу.
Однако, если пользователю необходимо немедленно увидеть результат обработки на следующей странице, вам просто нужно выяснить что-то еще.