在 EB 上部署结构化 Flask 应用程序 - 查看函数映射错误
Posted
技术标签:
【中文标题】在 EB 上部署结构化 Flask 应用程序 - 查看函数映射错误【英文标题】:Deploying structured Flask app on EB - View function mapping error 【发布时间】:2017-09-15 00:16:18 【问题描述】:我最近一直在努力将我的 Flask 应用程序部署到 AWS ElasticBeanstalk。我对 Web 项目和 AWS 还很陌生,所以每天都很艰难。每隔一段时间,我都会将我的项目部署到 EB(过去我能够解决问题),但是自从我将我的应用程序从单一的 application.py
重组为更结构化的方法后,我一直在苦苦挣扎。部署本身已成功,但我面临 500 错误。日志说:
我的应用结构是:
我的应用程序/ 运行服务器.py 要求.txt 应用程序/ __init__.py 配置文件 静止的/ 会员/ __init__.py 视图.py 模型.py 模板/我的.ebextensions/<env-name>.config
包含:
最后,我的views.py
文件包含我所有的 url 路由。我已经确定所有的函数名都是一样的。
有人知道我正在寻找什么样的问题/解决方案吗?我可以提供更多信息来提供帮助吗?
谢谢!
编辑:将views.py
中的def index()
函数更改为def newFunctionForTesting()
会产生AssertionError: View function mapping is overwriting an existing endpoint function: newFunctionForTesting
编辑 2: 它可能类似于 this one,但在这种情况下,建议的解决方案是将所有内容写入一个文件中,这不是我正在寻找的方法.. . 也许蓝图可以更好地工作...
编辑 3:这是我的应用的外观。
app\__init__.py
app\members\views.py
【问题讨论】:
错误显示AssertionError: View function mapping is overwriting an existing endpoint function: index
- 您是否从任何地方导入views.py
中的app
,并且(无论哪种方式)您是否在任何地方的名为index
的函数上定义另一条路线(无论URL 是否不同,函数的名称是什么)。
在views.py
之外没有路由(至少我没有定义),项目中也没有其他名为index
的函数。我为路由选择from app import application
和import app
。最后一次导入是访问共享全局变量的临时措施。这似乎是一种可怕的模式,并且会及时改变。我还应该提到,该应用程序可以在本地与内置服务器一起正常工作。
感谢您对 Flask 的投入和工作。我将处理这个例子,并在我拥有它后包含一个。我检查了所有视图功能和路线,没有冲突。当使用 Flask 的内置服务器运行时,不会发生这种情况。我以前犯过这个错误(这给了我内置服务器的错误),但至少现在不是那种不小心将两个视图函数命名为相同的错误。也许这与在我的__init.py__
底部包含views.py
和在views.py
中包含app
有关?
将views.py
中的def index()
函数更改为def newFunctionForTesting()
会产生AssertionError: View function mapping is overwriting an existing endpoint function: newFunctionForTesting
。为了以防万一,我还从views.py
中删除了import app
。
【参考方案1】:
我按照this 示例来设置我的WSGIPath,但由于@davidism 指出了这一点,我尝试了一种不同的方法并且它奏效了。我创建了一个app.wsgi
文件,它基本上只是导入我的应用程序对象并在我的.ebextensions/<env-name>.config
中设置WSGIPath: app/app.wsgi
。该应用程序现在通过 Elastic Beanstalk 成功部署和启动。我的静态资源停止工作,但我必须在 Elastic Beanstalk 控制台中更新 Configuration > Software Configuration > Static Files
下的静态文件夹的映射。
谢谢!
【讨论】:
以上是关于在 EB 上部署结构化 Flask 应用程序 - 查看函数映射错误的主要内容,如果未能解决你的问题,请参考以下文章
在Azure上使用OpenCV部署Python Flask应用的最佳方法
在 ec2 实例中部署 eb 后,ruby 应用程序 aws 数据丢失