2017-02-02 6 views
0

У меня есть приложение, развернутое на heroku.Python flask heroku - Поле загрузки изображений (WTForms) делает тайм-аут APP (занимает слишком много времени)

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

Я уже нашел проблему. На этом сайте пользователи могут загружать изображения (не более 10). Я использую там 1 Поле ввода для изображений, где я разрешаю multiselect, поэтому единственный способ загрузить несколько изображений - это сделать это сразу.

WTForms:

bild = FileField("Weitere Bilder hochladen", validators=[FileAllowed(['jpg', 'png', 'jpeg'], 'Nur Bilder im Formal JPG oder PNG')]) 

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

Моей идея:

Чтобы решить эту проблему, я бы отключить MULTISELECT и добавить 9 FileFields в выводе дополнительного WTForms, поэтому пользователь должен загружать изображения один на один, это путь?

Или я должен добавить индикатор выполнения и увеличить тайм-аут, что является лучшей практикой здесь?

EDIT

Хорошо, я нашел несколько решений, но я хотел бы использовать индикатор и увеличить время ожидания запроса от Heroku.

Я постараюсь, чтобы загрузить новую PROCFILE:

web: gunicorn main:app --timeout 120 

ответ

0

Хорошо мне удалось решить эту проблему, но я сделал это быстро и не очень эффективным.

Лучшее решение, кажется, здесь: Heroku`s solution

я решил его с увеличением времени ожидания для моего приложения. Поэтому я загрузил новый PROCFILE моего приложения Heroku:

web: gunicorn main:app --timeout 120 

После этого я реализую загрузочную анимацию моей кнопки отправки формы, которая делает длинный запрос. Часть я добавил в span tag:

<button type="submit" class="btn add-btn"> <span class="ani-holder"><span class="glyphicon glyphicon-refresh glyphicon-refresh-animate"></span></span> Zimmer einstellen </button> 

Initialy Я делаю анимацию, чтобы быть display: none;. Если нажать кнопку, форма будет отправлена. Здесь я использую JQuery, чтобы изменить отображение загрузочной анимации display: inherit; и сделать его выглядеть лучше, я также изменить цвет фона кнопки:

$('#regi').submit(function(){ 
    $('.ani-holder').css("display", "inherit"); 
    $('.add-room-container .add-btn').css("background-color", "#afddfe");   
}); 

Функция выполняется в то время как форма передает запрос. После этого я redirect url и перезагрузите страницу, так что это. Если запрос будет быстрым, тогда вы ничего не увидите.