Estoy implementando una aplicación web en beanstalk elásticos usando este tutorial y el mismo archivo 'application.py' que tienen: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask. html#python-flask-setup-venv
Recibo un error 502 cuando voy al sitio y el estado del medio ambiente está degradado o grave. Cuando reviso los registros, veo esto (que supongo que es la raíz del problema):
Jun 19 22:05:18 ip-172-31-15-237 web: File "/usr/lib64/python3.7/importlib/__init__.py", line 127, in import_module Jun 19 22:05:18 ip-172-31-15-237 web: return _bootstrap._gcd_import(name[level:], package, level) Jun 19 22:05:18 ip-172-31-15-237 web: File "<frozen importlib._bootstrap>", line 1006, in _gcd_import Jun 19 22:05:18 ip-172-31-15-237 web: File "<frozen importlib._bootstrap>", line 983, in _find_and_load Jun 19 22:05:18 ip-172-31-15-237 web: File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked Jun 19 22:05:18 ip-172-31-15-237 web: ModuleNotFoundError: No module named 'application'Aquí está mi archivo application.py:
from flask import Flask # print a nice greeting. def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # some bits of text for the page. header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # EB looks for an 'application' callable by default. application = Flask(__name__) # add a rule for the index page. application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # add a rule when the page is accessed with a name appended to the site # URL. application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # run the app. if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production app. #application.debug = True application.run()Y aquí está mi archivo requirements.txt:
click==7.1.2 Flask==1.1.2 itsdangerous==1.1.0 Jinja2==2.11.2 MarkupSafe==1.1.1 numpy==1.16.3 pandas==0.24.2 python-dateutil==2.8.1 pytz==2020.1 six==1.15.0 Werkzeug==1.0.1La carpeta comprimida que subo a Elastic Beanstalk consta solo de estos dos archivos. También tenía un entorno virtual allí, pero el tutorial dice que no lo necesitas, así que me deshice de él.
También estoy ejecutando Python 3.7.1, así que tengo pip3. Y debo señalar que la aplicación web funciona cuando solo ejecuto el código python.
Tuve el mismo problema que tú. Bajar de categoría a AL1 resuelve esto, pero trae más problemas.
Descubrí que puede hacer que su aplicación sea compatible agregando la siguiente línea al final del archivo.
app = application
Alternativamente, puede hacer esto cuando define la instancia del matraz:
application = app = Flask(__name__) no olvide importar ambos en application.py si es necesario.
Esto funciona porque aws necesita que la instancia de Flask se llame aplicación, pero gunicorn necesita que la instancia de Flask se llame aplicación, por lo que de esta manera los hace felices a ambos.
Todos en el mundo llaman a la aplicación de instancias de Flask, excepto por aws aparentemente.
Tuve que hacer dos cosas para resolver el error No module named 'application' al implementar mi aplicación de matraz en beanstalk elásticos:
app : application = app = Flask(__name__)app.py a application.pyUna posible razón es el uso del entorno Amazon Linux 2 , en lugar de Amazon Linux 1 .
La lista de entornos de Python y sus distribuciones de Linux está aquí .
Desde el enlace que proporcionaste:
En este tutorial , usamos Python 3.6 y la versión correspondiente de la plataforma Elastic Beanstalk.
Python 3.6 es compatible con el entorno Amazon Linux 1 , mientras que utiliza Python 3.7, que es para el entorno Amazon Linux 2 .
Hay muchas diferencias entre AL1 y AL2, que los hacen incompatibles .