我在EC2(Ubuntu)上创建了一个Flask应用程序,因此我可以使用我创建的预测模型从另一个系统发送两个数据点。一切正常,没有numpy,但只要我在Apache中添加它就会引发内部服务器错误。所有模块都已通过pip -freeze安装和验证。该应用程序位于名为flaskapp的目录中。
以下是我wsgi的代码:
导入sys
sys.path.insert(0, '/var/www/html/flaskapp')
from flaskapp import app as application
以下是我对Apache conf文件所做的更改:
WSGIDaemonProcess flaskapp threads=5
WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
<Directory flaskapp>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
这是Flask应用代码:
#imports
import numpy as np
from flask import Flask, jsonify, request
import pickle as pickle
#Open Predicitve Model
pklmodel = 'model.pkl'
my_model = pickle.dumps(pklmodel, protocol=2)
app = Flask(__name__)
#Flask App Endpoint
@app.route('/api',methods=['POST'])
#Predicitions Function
def make_predict():
data = request.get_json(force=True)
predict_request = [data['Temp'],data['Pressure']]
predict_request = np.array(predict_request)
predGhi = my_model.predict(predict_request)
output = [predGhi[0]]
return jsonify(results=output)
#run app as webservice
if __name__ == '__main__':
app.run()
我错过了什么?
答案 0 :(得分:0)
如果是内部服务器错误,Apache的错误日志中应该有一条记录。最有可能的是,有一个未被捕获的异常,那里会有堆栈跟踪。请参阅Debugging Techniques — mod_wsgi 4.5.16 documentation。
使用mod_wsgi时,除非您或您正在使用的Web框架 采取具体行动来捕捉异常并提供详细信息 另一种方式,唯一没有被捕的细节 异常将被记录在Apache错误日志文件中。该 因此,Apache错误日志文件是您的主要信息来源 当事情出错时。
用户请求looks something like this上的mod_wsgi
错误日志条目:
[error] [client ..] mod_wsgi (pid=8184): Exception occurred processing WSGI script '.../django.wsgi'.
[error] [client ..] Traceback (most recent call last):
<...>
[error] [client ..] File "../apps/py26_logging/handlers.py", line 394, in emit
[error] [client ..] self.stream.flush()
[error] [client ..] ValueError: I/O operation on closed file
如果没有[client]
,这意味着加载/卸载模块时出错(例如编译错误)。