-->

Flask Beanstalk deployment errors

2019-08-23 03:11发布

问题:

I am relatively new to Python and I am trying to deploy a Flask app to AWS Beanstalk. I have followed the official tutorial and went through a lot of the resources available online (here or elsewhere) regarding deployment issues with Flask / Django on Beanstalk. No success, I keep getting errors I cannot fix. Below the structure of my app:

|-application.py
|-config.py
|-const.py
|-requirements.txt
|-app/
|--__init.py__
|--views.py
|--models.py
|--static/
|--templates/

My application.py

from app.views import application

application.run(debug=False)

The first few lines of my views.py file that contains the declaration of the Flask app:

from flask import Flask, render_template, redirect, url_for, session, request, abort
from flask_bootstrap import Bootstrap
from . models import Datalayer, Config, Signin
from . util import check_user
from flask_basicauth import BasicAuth
from flask_bcrypt import Bcrypt
from faker import Faker
from htmlmin.minify import html_minify
fake = Faker()


application = app = Flask(__name__)
app.config.from_object('config')

bootstrap = Bootstrap(app)
basic_auth = BasicAuth(app)
bcrypt = Bcrypt(app)

And finally the content of the /var/log/eb-activity.log

 SyntaxError: invalid syntax
      2017-06-07 19:08:18,171 ERROR    Error installing dependencies: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1
      Traceback (most recent call last):
        File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 22, in main
          install_dependencies()
        File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 18, in install_dependencies
          check_call('%s install -r %s' % (os.path.join(APP_VIRTUAL_ENV, 'bin', 'pip'), requirements_file), shell=True)
        File "/usr/lib64/python2.7/subprocess.py", line 541, in check_call
          raise CalledProcessError(retcode, cmd)
      CalledProcessError: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1 (ElasticBeanstalk::ExternalInvocationError)
    caused by: Traceback (most recent call last):
        File "/opt/python/run/venv/bin/pip", line 7, in <module>
          from pip import main
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/__init__.py", line 15, in <module>
          from pip.vcs import git, mercurial, subversion, bazaar  # noqa
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/vcs/mercurial.py", line 10, in <module>
          from pip.download import path_to_url
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/download.py", line 38, in <module>
          from pip._vendor import requests, six
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/_vendor/requests/__init__.py", line 53, in <module>
          from .packages.urllib3.contrib import pyopenssl
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/_vendor/requests/packages/__init__.py", line 3, in <module>
          from . import urllib3
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/__init__.py", line 10, in <module>
          from .connectionpool import (
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/connectionpool.py", line 37, in <module>
          from .request import RequestMethods
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/request.py", line 6, in <module>
          from .filepost import encode_multipart_formdata
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/filepost.py", line 3, in <module>
          from uuid import uuid4
        File "/opt/python/run/venv/local/lib/python3.4/site-packages/uuid.py", line 138
          if not 0 <= time_low < 1<<32L:
                                      ^
      SyntaxError: invalid syntax
      2017-06-07 19:08:18,171 ERROR    Error installing dependencies: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1
      Traceback (most recent call last):
        File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 22, in main
          install_dependencies()
        File "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py", line 18, in install_dependencies
          check_call('%s install -r %s' % (os.path.join(APP_VIRTUAL_ENV, 'bin', 'pip'), requirements_file), shell=True)
        File "/usr/lib64/python2.7/subprocess.py", line 541, in check_call
          raise CalledProcessError(retcode, cmd)
      CalledProcessError: Command '/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt' returned non-zero exit status 1 (Executor::NonZeroExitStatus)

And my requirements.txt:

appdirs==1.4.3
bcrypt==3.1.3
beautifulsoup4==4.6.0
cffi==1.10.0
click==6.7
django-htmlmin==0.10.0
dominate==2.3.1
Faker==0.7.12
Flask==0.12.2
Flask-BasicAuth==0.2.0
Flask-Bcrypt==0.7.1
Flask-Bootstrap==3.3.7.1
Flask-WTF==0.14.2
html5lib==0.999999999
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
packaging==16.8
pycparser==2.17
pyparsing==2.2.0
python-dateutil==2.6.0
PyYAML==3.12
requests==2.14.2
six==1.10.0
ua-parser==0.7.3
user-agents==1.1.0
uuid==1.30
visitor==0.1.3
webencodings==0.5.1
Werkzeug==0.12.2
WTForms==2.1

I have no beanstalk config file (yet) but I have performed a manual install of: yum install libffi-devel

My first question is how do we determine when we need to add -devel packages to our deployment? (I fixed a first deployment issue with the installation of the devel package above.) I assumed all the necessary packages / libraries would be installed with the requirements.txt?

My second question is do you have any clue as to why this deployment is failing? (will hopefully be linked to the first question?)

Thanks in advance for the help,

Stf

回答1:

Try removing the following line from your requirements.txt

uuid==1.30

uuid is bundled with Python as of version 2.5 or so.