Я запускаю очень спартанское приложение для машинного обучения, которое структурировано так:
app.py:
from flask import Flask, request, jsonify
import pandas as pd
from joblib import load
app = Flask(__name__)
@app.route('/predict', methods=['POST'])
def predict():
df = pd.DataFrame(request.json)
df = df.reindex(columns=feature_columns, fill_value=0)
prediction = list(ada.predict(df))
return jsonify({"prediction": int(prediction[0])})
@app.route('/test', methods=['GET'])
def test():
return "get successful"
if __name__ == '__main__':
ada = load("./model/adaboost_model")
feature_columns = load("./model/feature_columns")
app.run()
needs.txt :
Flask
gunicorn
pandas
joblib
Procfile :
web: gunicorn -b :$PORT app:app
и модель / папка, содержащая две маринованные модели Adaboost.
Я развернул это на Heroku, конечная точка GET on / test работает нормально, приложение работает нормально, возвращает 404 для случайных запросов и распознает, что / прогнозирование имеет только метод POST. Однако, когда я запускаю POST, я получаю Внутреннюю ошибку сервера, я уверен, что это не фактический код метода POST, который вызывает проблемы, потому что простой метод POST, который я написал для тестирования, также терпит неудачу, и он не делает ничего связанного с кодом.
Локально это работает отлично, проверено почтальоном, вывод правильный и все. Что может быть не так с запросами POST при развертывании на Heroku?