Gunicorn не может начать колбу проекта EC2 Ubuntu - PullRequest
0 голосов
/ 03 октября 2019

Я только что развернул на машине Ubuntu EC2, приложение Flask Python 3. Я успешно развернул порт 6001, используя python3 src/server.py. У меня запущено приложение, но когда я использую строку gunicorn -w 4 -b 0.0.0.0:6001 server:app после остановки сервера Flask, оно завершается с ошибкой, которая выглядит так, как будто он не может выполнить импорт, как показано на рисунке.

Попробовал это на моем Ubuntuмашина от моего собственного AWS, и это прекрасно работает, хотя на моей машине мне не нужно устанавливать 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$

1 Ответ

0 голосов
/ 03 октября 2019

Когда вы запускаете gunicorn, он работает с установленным в системе python, который равен 2.7, как вы можете видеть на трассировке стека. Это не имеет установленного Flask, поэтому ошибка.

Это то, для чего нужны виртуальные среды, которые я не думаю, что вы используете в данный момент. venvs Сохраняйте зависимости проекта изолированными и избегайте подобных проблем.


Чтобы правильно запустить это, убедитесь, что установлен модуль venv python3:

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 активен;подсказка оболочки начинается с (venv)) она должна работать.

...