我刚刚部署在Ubuntu EC2机器(Flask Python 3应用程序)中。我已经使用python3 src/server.py
成功部署在端口6001上。我正在运行我的应用程序,但是当我停止Flask服务器后使用gunicorn -w 4 -b 0.0.0.0:6001 server:app
行时,它退出并出现错误,好像它无法执行导入操作,如图所示。
在我自己的AWS上的Ubuntu计算机上对此进行了尝试,尽管在我的计算机上我不必安装gunicorn
,但这仍然可以正常工作。
也尝试使用uwsgi --http 0.0.0.0:6000 --module server:app
,但它会以http is ambiguous error
消息中止。
from flask import Flask, render_template, request
from src.controller.token import getTokenLibery
app= Flask(__name__,template_folder='views')
#@app.route('/token')
@app.route('/handle_data', methods=['POST'])
def generateToken():
try:
email = request.form['email']
tokenliberty=getTokenLibery(email)
#print("valor correcto de response=")
#print(tokenliberty)
if str(tokenliberty).find("true") >= 0: # value seems to be= "b'true'"
render= render_template('retrieveUser_Response.html')
return render
else:
render= render_template('retrieveUserbadaResponse.html')
return render
except Exception:
render= render_template('retrieveUserbadaResponse.html')
return render
@app.route('/')
def getform():
# render= render_template('retrieveUser_Response.html')
render= render_template('retrieveUser.html')
return render
if __name__== '__main__':
#app.run(port=5000)
app.run(host="0.0.0.0", port=6001)
使用python3 server.py
:
ubuntu@ip-10-0-0-81:~/passRecov/src$ python3 server.py
* Serving Flask app "server" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:6001/ (Press CTRL+C to quit)
使用gunicorn -w 4 -b 0.0.0.0:6001 server:app
:
ubuntu@ip-10-0-0-81:~/passRecov/srcgunicorn -w 4 -b 0.0.0.0:6001 server:app
[2019-10-03 15:18:13 +0000] [10731] [INFO] Starting gunicorn 19.7.1
[2019-10-03 15:18:13 +0000] [10731] [INFO] Listening at: http://0.0.0.0:6001 (10731)
[2019-10-03 15:18:13 +0000] [10731] [INFO] Using worker: sync
[2019-10-03 15:18:13 +0000] [10735] [INFO] Booting worker with pid: 10735
[2019-10-03 15:18:13 +0000] [10735] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 578, in spawn_worker
worker.init_process()
File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 135, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 377, in import_app
__import__(module)
File "/home/ubuntu/passRecov/src/server.py", line 4, in <module>
from flask import Flask, render_template, request
ImportError: No module named flask
[2019-10-03 15:18:13 +0000] [10735] [INFO] Worker exiting (pid: 10735)
[2019-10-03 15:18:13 +0000] [10731] [INFO] Shutting down: Master
[2019-10-03 15:18:13 +0000] [10731] [INFO] Reason: Worker failed to boot.
ubuntu@ip-10-0-0-81:~/passRecov/src$
答案 0 :(得分:0)
当您启动gunicorn时,它将在系统安装的python 2.7
上运行,如您在堆栈跟踪中所见。没有安装Flask,因此会出现错误。
这就是虚拟环境的用途,我认为您目前不在使用。 venvs
保持项目依赖关系的隔离,避免出现此类问题。
正确运行此方法的方法是确保已安装python3的venv模块:
sudo apt-get install python3-venv
然后为每个新项目创建一个venv并将其激活:
python3 -m venv venv
. venv/bin/activate
您的提示现在应更改为:
(venv) ubuntu@ip-10-0-0-81:~/passRecov/src $
...,表明您在该虚拟环境中。 (键入deactivate
,提示符将恢复为正常。)
安装类似这样的东西:
pip install gunicorn flask
获取冻结的版本的输出:
pip freeze > requirements.txt`
该txt
文件现在包含该列表,您应该提交该列表以进行版本控制。每当您需要重新创建相同的环境时,都可以创建并激活它(如上所述),然后执行以下操作:
pip install -r requirements.txt
在此阶段运行gunicorn
(假设您的venv处于活动状态; shell提示符以(venv)
开头),它将正常工作。