Flask 应用程序 - 部署到 AWS Elastic Beanstalk 时出错

Posted

技术标签:

【中文标题】Flask 应用程序 - 部署到 AWS Elastic Beanstalk 时出错【英文标题】:Flask Application - Error deploying to AWS Elastic Beanstalk 【发布时间】:2021-10-11 19:18:14 【问题描述】:

我正在尝试将我的 Flask 应用程序部署到 AWS Elastic Beanstalk。但是,我遇到了这个问题/错误,它似乎不是来自我编写的应用程序代码,而是来自其中一个库。

    mod = importlib.import_module(module)
Aug  7 00:19:43 ip-172-31-27-51 web: File "/usr/lib64/python3.8/importlib/__init__.py", line 127, in import_module
Aug  7 00:19:43 ip-172-31-27-51 web: return _bootstrap._gcd_import(name[level:], package, level)
Aug  7 00:19:43 ip-172-31-27-51 web: File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
Aug  7 00:19:43 ip-172-31-27-51 web: File "<frozen importlib._bootstrap>", line 991, in _find_and_load
Aug  7 00:19:43 ip-172-31-27-51 web: File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
Aug  7 00:19:43 ip-172-31-27-51 web: ModuleNotFoundError: No module named 'application'

我在AWS EC2 实例日志中发现了错误。

这是我的文件结构:

- auth
  * login
  * server
  * init.py

  - templates
    * base.html

- pages
  * home.py
  * page2.py 

index.py
app.py

app.py的内容


import dash
import flask

app = dash.Dash(__name__,
                          external_stylesheets=external_stylesheets,
               )

server = app.server

index.py的内容

app.layout = html.Div([

    # header
    html.Div([
        
        dcc.Link(
            href=get_relative_path('/home'),
        ),

        dcc.Link(
            href=get_relative_path('/archive'),
        ),

        dcc.Location(id='url'),

        html.Div(id='page-content', style='margin-left': '2%'),

])



# Render page content
@app.callback(Output("page-content", "children"),
              [
                Input('url', 'pathname')
              ]
             )
def display_content(pathname):

    if pathname == '/home':
        return home.layout

    elif pathname == '/archive':
        return archive.layout()
        
    else:
        return home.layout
      

init.py的内容

from flask_login import LoginManager, login_required
from .server import server
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.serving import run_simple
from index import app as dashApp


@server.route('/dashboard')
@login_required
def render_dashboard():
    return redirect('/dashboard/')


app = DispatcherMiddleware(server, 
    '/dashboard': dashApp.server,
    #add dash routes
    )

if __name__ == '__main__':
    run_simple('0.0.0.0', 5000, app, use_reloader=True, use_debugger=True)

server.py的内容

from flask import Flask

server = Flask(__name__, instance_relative_config=False)

【问题讨论】:

进展如何?仍然不清楚为什么需要application 个人资料有问题。 【参考方案1】:

您的app.py 应取消application.py。代码中的app 相同。应该是application

【讨论】:

我已经能够使用 app.py 运行该应用程序。为什么要查找 application 和 application.py? @kms 因为这些是默认的 eb 设置 我之前使用app.pyapp已经能够成功运行应用程序 @kms 您之前可能更改过默认设置。您的 EB 显然在寻找 application: "ModuleNotFoundError: No module named 'application'"。

以上是关于Flask 应用程序 - 部署到 AWS Elastic Beanstalk 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SSL 将 AWS EC2 Flask 应用程序部署到 HTTPS 端口 443?

尝试将 Flask 应用程序部署到 AWS Elastic Beanstalk 时,我不断收到“ModuleNotFoundError: No module named 'app'”错误消息

尝试使用 SSL 将 Flask 应用程序部署到 AWS Beanstalk:没有可用的包 mod24_ssl

将使用 Celery 和 Redis 的 Flask 应用程序部署到 AWS:直接使用 Elastic Beanstalk 还是 EC2?

Terraform elasticbeanstalk部署

Flask 应用程序未在 AWS 弹性 beantalk 上部署