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