Когда клиент меняет свое изображение профиля, он обращается к методу update
, который отвечает update.js.erb
.Это быстрый и простой процесс.Однако за кулисами на сервере из изображения профиля создается группа файлов (10 из них), которые необходимо загрузить в сервер Amazon с сервера.Это длительный процесс, и я не хочу заставлять клиента ждать, пока он не закончится.Более того, загрузка файлов часто завершается неудачей с RequestTimeoutException
, поскольку они занимают более 15 секунд.
Все это вызывает много вопросов:
Как вы выполняете генерацию / загрузку 10 файлов послеupdate
метод вышел?Потоки уничтожаются после завершения метода main.
Как перехватить исключение внутри потока?Следующий код не перехватывает исключения тайм-аута.
threads = []
threads << Thread.new {
begin
# upload file 1 ....
rescue Rack::Timeout::RequestTimeoutException => e
# try to upload again ....
else
ensure
end
}
threads << Thread.new {
begin
# upload file 2 ....
rescue Rack::Timeout::RequestTimeoutException => e
# try to upload again ....
else
ensure
end
}
threads.each { |thr|
thr.join
}
Каков наилучший способ снова загрузить файл, если он истек?
Как лучше всего решить эту проблему?