Как использовать время ожидания в стойке, чтобы корректно обработать время ожидания запроса от пользователя, пытающегося загрузить большой файл - PullRequest
0 голосов
/ 19 октября 2019

Heroku не позволяет загружать большие файлы на сервер (жесткий 30-секундный тайм-аут). Я должен разрешить пользователям загружать файлы на сервер. Я могу предупредить пользователей, чтобы они не пытались загружать большие файлы, но проверка на уровне модели не помогает мне обеспечить это.

Я прочитал множество мест, в которых я должен использовать стойку, чтобы установить тайм-аут короче, чем30-секундный тайм-аут Heroku, который я могу обработать в своем приложении, чтобы изящно отобразить сообщение об ошибке, предложить пользователю другие варианты и т. Д.

За время ожидания GitHub в стойке я поместил его в свой Gemfile:

gem "rack-timeout", require:"rack/timeout/base"

и добавил rack_timeout.rb к config/initializers с этим:

Rails.application.config.middleware.insert_before Rack::Runtime, Rack::Timeout, service_timeout: 5

Затем я добавил это к своему контроллеру:

rescue_from Rack::Timeout::RequestTimeoutException do |exception|
  # my code
end

Когда я контролирую свой журнал во время работыприложение, кажется, что тайм-аут устанавливается, когда начинается запрос:

source=rack-timeout id=8be4dae9-2a1c-4769-ae1c-c843c3e0c558 timeout=5000ms service=31ms state=completed

Однако, когда я пытаюсь загрузить большой файл, который занимает гораздо больше пяти секунд, ничего не происходит - я не вижу исключенийбыть брошенным в журнал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...