2017-01-14 8 views
0

私はFlaskに初めて入って、URLのブラックリストを管理するGET、POST、DELETEルートを持つAPIを作成しようとしています。Flask POSTルートが応答しなくなる

POSTルートでは、「応答できませんでした」というエラーが表示されます。奇妙な部分は、私のGETとDELETEルートはまだ正常に動作しているということです。私はいくつかのログを取得しようとしましたが、多く取得することができませんでした。私は助けていただければ幸いです!ここで

は私のアプリである:ここでは

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() 

は私の設定ファイルである:

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 

そして、ここでは、私は労働者を開始するために使用しているコマンドです:

gunicorn -c app.conf -w3 --certfile=/etc/letsencrypt/live/mtfmu4.tk/cert.pem --keyfile=/etc/letsencrypt/live/mtfmu4.tk/privkey.pem api:app 

特にPOSTルートではこれが起こる原因となるものは何もないe。

私はvirtualenv、Flask、apache2とUbuntu 14.04のgunicornでPython 3を実行しています。

助けていただけたら幸いです!

+0

どのようにデータを投稿していますか? curlやその他のPythonスクリプトを使用していますか? – jprockbelly

+0

実際にjQueryのAjaxコールを使用してPOSTしています。私はこの問題を解決したかもしれないと感じていますが、もう一度クラッシュするかどうかを確認するのにもう12時間もかかります。それがうまくいくなら私の解決策を下に掲載します –

答えて

0

解決策は、withステートメントを使用してピクルファイルを開くことでした。開いているか閉じているかの競合が発生していても助けてくれたようだ。

関連する問題