我正在使用此tutorial
背景:我正在使用flask
post API激活Selenium来提取信息并将其发送到网站。当我不应用nginx
配置而只是在服务器上运行下面的代码时,这一功能非常好(就像在本地机器上使用端口5000一样)。
问题:当我尝试通过nginx
和uwsgi
部署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打印机
如果我错过了任何信息,请让我知道我会提供。
谢谢你的见解
1条答案
按热度按时间eiee3dmh1#
我已经关注了the same tutorial。
从你的答案是不清楚的名称不同的文件,你已经创建。我建议你完全遵循the tutorial,特别是名称模式,它建议。我试图给予你一些建议。
必须为
uwsgi.py
,因为在文件project.ini
中使用了以下选项:必须是
app.py
,因为在文件uwsgi.py
中使用了以下指令:from app import app
app.py
和uwsgi.py
的同一文件夹中创建了Unix套接字文件myproject.sock
。实际上,在文件project.ini
中使用了以下选项:要创建此套接字并为其给予正确的权限,可以使用以下Python脚本:
将之前的程序保存在您要创建Unix域套接字的文件夹中(请参阅指令
path = './myproject.sock'
)。可能存在其他创建Unix套接字域文件的方法,但我在我的flask/uwsgi应用程序中使用了之前的Python程序。我希望这些建议对你有用。