使用nginx和uwsgi在flask中执行post请求时发生内部服务器错误

busg9geu  于 2022-11-02  发布在  Nginx
关注(0)|答案(1)|浏览(188)

我正在使用此tutorial
背景:我正在使用flask post API激活Selenium来提取信息并将其发送到网站。当我不应用nginx配置而只是在服务器上运行下面的代码时,这一功能非常好(就像在本地机器上使用端口5000一样)。
问题:当我尝试通过nginxuwsgi部署flask应用程序,并遵循此tutorial的指示时,每当我执行POST请求http://my_domain/find_data时,我都会收到内部服务器错误

下面我将展示我的部分代码。

from app import app
if __name__ == "__main__":
        app.run()

app.py代码(用于管理POST请求http://my_domain/find_data)为:

from flask import Flask, send_from_directory, stream_with_context, request, Response
from flask_restful import Api, Resource, reqparse
from flask_cors import CORS #comment this on deployment
from data_finder import DataFinder
from time import sleep
from contextlib import closing
import requests
import json 
from flask import jsonify
from flask import jsonify, make_response

app = Flask(__name__, static_url_path='', static_folder='frontend/build')
CORS(app) #comment this on deployment
api = Api(app)

@app.route("/")
def hello():
    return send_from_directory(app.static_folder, 'index.html')

@app.route("/find_data", methods = ['POST'])
def FindData():
    person = request.get_json()['person']
    print(person)
    results = {}
    data_finder = DataFinder()

    results['Spokeo'] = list(data_finder.get_spokeo_data(person))
    results['White Pages'] = list(data_finder.get_whitepages_data(person).keys())

    return make_response(jsonify(results), 200)

我的project.ini文件是这样的:

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

die-on-term = true

最后,我的nginx配置文件是

server {
    listen 80;
    server_name my_domain www.my_domain;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/help/data-finder/privaseame_web_app/myproject.sock;
        uwsgi_read_timeout 900;
        proxy_read_timeout 1800;
        proxy_connect_timeout 1800;
        proxy_send_timeout 1800;
        send_timeout 1800;
    }

    client_header_timeout 900s;
    client_body_timeout 900s;
    keepalive_timeout 900s;
    send_timeout 900s;
}

我正在使用数字海洋linux droplet Ubuntu 18-0.4 LTS运行python3.10.6我使用了下面的堆栈溢出链接,但关于它们的信息不够充分
Guide1Guide2打印机
如果我错过了任何信息,请让我知道我会提供。
谢谢你的见解

eiee3dmh

eiee3dmh1#

我已经关注了the same tutorial
从你的答案是不清楚的名称不同的文件,你已经创建。我建议你完全遵循the tutorial,特别是名称模式,它建议。我试图给予你一些建议。

  • 文件名:
from app import app
if __name__ == "__main__":
        app.run()

必须为uwsgi.py,因为在文件project.ini中使用了以下选项:

[uwsgi]
module = wsgi:app
  • 文件名:
from flask import Flask, send_from_directory, stream_with_context, request, Response
from flask_restful import Api, Resource, reqparse
from flask_cors import CORS #comment this on deployment
from data_finder import DataFinder
from time import sleep
from contextlib import closing
import requests
import json 
from flask import jsonify
from flask import jsonify, make_response

app = Flask(__name__, static_url_path='', static_folder='frontend/build')
CORS(app) #comment this on deployment
api = Api(app)

@app.route("/")
def hello():
    return send_from_directory(app.static_folder, 'index.html')

@app.route("/find_data", methods = ['POST'])
def FindData():
    person = request.get_json()['person']
    print(person)
    results = {}
    data_finder = DataFinder()

    results['Spokeo'] = list(data_finder.get_spokeo_data(person))
    results['White Pages'] = list(data_finder.get_whitepages_data(person).keys())

    return make_response(jsonify(results), 200)

必须是app.py,因为在文件uwsgi.py中使用了以下指令:from app import app

  • 确保在包含app.pyuwsgi.py的同一文件夹中创建了Unix套接字文件myproject.sock。实际上,在文件project.ini中使用了以下选项:
socket = myproject.sock

要创建此套接字并为其给予正确的权限,可以使用以下Python脚本:

import socket as s
import pwd
import grp
import os

path = './myproject.sock'

# create the `Unix Domain Socket`

sock = s.socket(s.AF_UNIX)
sock.bind(path)

# set user and group for the Unix Domain Socket created (www is the same user of NGINX)

uid = pwd.getpwnam("www").pw_uid
gid = grp.getgrnam("www").gr_gid

os.chown(path, uid, gid)
os.chmod(path, 0o660)

将之前的程序保存在您要创建Unix域套接字的文件夹中(请参阅指令path = './myproject.sock')。可能存在其他创建Unix套接字域文件的方法,但我在我的flask/uwsgi应用程序中使用了之前的Python程序。
我希望这些建议对你有用。

相关问题