У меня есть простое приложение, работающее на 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 секунд после того, как я получаю сообщение об ошибке).