Внутренняя ошибка сервера, несмотря на предложение try / кроме и без журнала ошибок - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть простое приложение, работающее на Windows Server 2012 с использованием IIS.Он используется для запуска R-скрипта (это очень сложный скрипт, и переписать его на Python нельзя).Это код:

try:
    output = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
except:
    return jsonify({'output': 'Error!', 'returncode': '0', 'error': 'Unknown Error'})
else:
    error = str(output.stderr)
return jsonify({'output': str(output.stdout), 'returncode': str(output.returncode), 'error': error})

Он запускается AJAX и работает нормально в большинстве случаев, но иногда это приводит к «Внутренней ошибке сервера».

Теперь интересная часть.Вышеуказанная ошибка не перехватывается предложением "исключение", она не регистрируется в файле error.log Flask, а соответствующий сценарий R делает все, что должен.Короче говоря, все работает как надо, но выдает внутреннюю ошибку сервера без особой причины.Это очень раздражает, так как пользователь получает ошибку, несмотря на то, что все работает нормально.

Я уже пытался не использовать try / исключением, а также "кроме исключений как err", но они также не регистрируют никаких ошибок.

Вот как настраивается error.log.Он работает для других частей приложения без каких-либо проблем.

app = Flask(__name__, static_url_path="", static_folder="static")    
errHandler = logging.FileHandler('errors.log')
errHandler.setLevel(logging.ERROR)
app.logger.addHandler(errHandler)

Любые идеи, как я могу поймать эту ошибку, чтобы я мог попытаться отладить ее?

ОБНОВЛЕНИЕ

Я заметил, что Внутренняя Ошибка Сервера возвращается примерно через 1,5 минуты.Когда я изменил R-скрипт на простую команду wait 10s, она работала безупречно, поэтому, похоже, проблема с тайм-аутом.

Я установил тайм-аут на 180 с на subprocess и ajax, но это не помогло.Есть ли еще место, где мне следует поискать?

ОБНОВЛЕНИЕ 2

Я убрал ajax из уравнения и использую стандартную гиперссылку на страницу с подпроцессом.Он все еще дает внутреннюю ошибку сервера через 1,5 мин.Я также изменил сценарий R на ожидание 2 минуты, и сам сценарий завершается без проблем (через 30 секунд после того, как я получаю сообщение об ошибке).

1 Ответ

0 голосов
/ 20 декабря 2018

Я искал в совершенно неправильном месте.Проблема была вызвана настройкой FastCGI Activity Timeout в диспетчере IIS.Тайм-аут составлял всего 70 секунд, в то время как subprocess занимал гораздо больше времени.Увеличение таймаута активности решило проблему.

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