【问题标题】:gunicorn cant start flask project ec2 ubuntugunicorn 无法启动烧瓶项目 ec2 ubuntu
【发布时间】:2019-10-03 15:19:40
【问题描述】:

我刚刚在 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$

【问题讨论】:

    标签: ubuntu flask amazon-ec2 python-3.6 gunicorn


    【解决方案1】:

    当您启动 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) 开头)它应该可以工作。

    【讨论】:

    • 没有问题。在这种情况下,您应该单击接受答案:)
    猜你喜欢
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2023-03-14
    • 2016-05-13
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多