Ich habe gerade meinen ersten Sprung in Flask genommen und versuche, es zu verwenden, um eine API zu erstellen, die GET, POST und DELETE Routen hat, um eine Blacklist von URLs zu verwalten.Flask POST Route reagiert nicht mehr
Nach einer gewissen Zeit gibt mir die POST-Route einen Fehler: "Konnte keine Antwort erhalten." Der komische Teil ist, dass meine GET und DELETE Routen immer noch gut funktionieren. Ich habe versucht, etwas Logging zu machen, aber ich konnte nicht viel bekommen. Ich würde mich über jede Hilfe freuen!
Hier ist meine App:
from flask import Flask, request
from flask_cors import CORS, cross_origin
from flask_restful import Resource, Api
import pickle
app = Flask(__name__)
app.config['DEBUG'] = True
CORS(app)
@app.route("/get-blacklist")
def loadblacklist():
blacklist = pickle.load(open("blacklist.p", "rb"))
return dumps(blacklist)
@app.route("/post-blacklist", methods=['POST'])
def puturl():
# Get and clean URL
url = request.form['url']
url = sanitise(url)
# Load the pickle
blacklist = list(pickle.load(open("blacklist.p", "rb")))
# Check if it's already in there
if url not in blacklist:
blacklist.append(url)
# Save the pickle
pickle.dump(blacklist, open("blacklist.p", "wb"))
return 'You posted {}'.format(url)
@app.route("/remove-blacklist", methods=['DELETE'])
def removeurl():
# Get and clean the URL
url = request.form['url']
url = sanitise(url)
# Load the pickle
blacklist = list(pickle.load(open("blacklist.p", "rb")))
# Remove if its in there
if url in blacklist:
blacklist.remove(url)
# Save the pickle
pickle.dump(blacklist, open("blacklist.p", "wb"))
return 'You removed {}'.format(url)
def sanitise(url):
# Sanitise
url = url.lower()
url = url.replace('www.', '')
url = url.replace('http://', '')
url = url.replace('https://', '')
if url[-1] == '/':
url = url[:-1]
return url
if __name__ == '__main__':
app.run()
Hier ist meine Config-Datei ist:
import os
bind = '0.0.0.0:8000'
workers = 3
backlog = 2048
worker_class = "sync"
debug = False
proc_name = 'gunicorn.proc'
pidfile = './gunicorn.pid'
logfile = './debug.log'
loglevel = 'debug'
timeout = 1000
Und hier ist der Befehl, den ich die Arbeiter starten bin mit:
gunicorn -c app.conf -w3 --certfile=/etc/letsencrypt/live/mtfmu4.tk/cert.pem --keyfile=/etc/letsencrypt/live/mtfmu4.tk/privkey.pem api:app
Ich kann in meiner POST-Route nichts besonders unterschiedliches sehen, was dazu führen würde - besonders, da es für eine Weile zu funktionieren scheint e.
Ich laufe Python 3 in einem virtualenv, Flask, Gunicorn auf Apache2 und Ubuntu 14.04.
Jede Hilfe wäre willkommen!
Wie veröffentlichen Sie die Daten? d. h. mit curl oder einem anderen Python-Skript? – jprockbelly
Ich bin POST mit einem jQuery Ajax Aufruf tatsächlich. Ich habe das Gefühl, dass ich das Problem gelöst habe, aber ich werde es noch weitere 12 Stunden geben, um zu sehen, ob es wieder abstürzt. Wird meine Lösung unten posten, wenn es funktioniert –