如何在 AWS Elastic Beanstalk 上配置我的 WSGI 应用程序的名称?
Posted
技术标签:
【中文标题】如何在 AWS Elastic Beanstalk 上配置我的 WSGI 应用程序的名称?【英文标题】:How do I configure the name of my WSGI application on AWS Elastic Beanstalk? 【发布时间】:2015-03-18 20:35:52 【问题描述】:我的 Python Web 应用程序名为 app
# example.py
import flask
app = flask.Flask(__name__.split('.')[0])
当我尝试在 AWS-EB 上使用
# run.py (set correctly with WSGIPath)
from example import app
if __name__ == "__main__":
app.run()
我明白了
mod_wsgi (pid=22473): Target WSGI script '/opt/python/current/app/run.py'
does not contain WSGI application 'application'.
如何告诉 AWS 我的应用程序实例名为 app
?
【问题讨论】:
是的,很好的参考资料(但其中一些对我不起作用;请参阅我的相关问题)。 如果基本答案对您不起作用,您应该解释您尝试过的方法以及为什么它在您的问题中不起作用。这样以后遇到同样问题的读者就能完全理解答案。 【参考方案1】:虽然可以配置 WSGIPath。 Beanstalk 仍然希望 app 变量被命名为“应用程序”。
小型单文件python应用程序的简单解决方法可以是
from flask import Flask
app = Flask(__name__)
application = app # For beanstalk
您可以保持其余代码不变。你只需要添加那一行application = app
【讨论】:
【参考方案2】:mod_wsgi 需要名为 application
的变量。尝试做这样的事情
from example import app as application
注意:不要使用application.run()
。不需要。
【讨论】:
哇,AWS 所需要的只是一个名为application
的实例; run.py
的全部内容可能是那个单一的导入,对吗?
事实上,是否正确地说 AWS(不像 Heroku)根本不需要 run 脚本,只需要一个文件定义了名为application
的实例。
通常出于开发目的,带有应用程序的模块在文件底部的 if name == 'main' 部分中包含 app.run() .好的做法是创建导入应用程序的 .wsgi 文件。
是的,明白了(固定在上面);但是在 AWS 上为我处理运行是否正确('run.py' 刚刚导入)所以我只需要 define application
(在 AWS 识别为 WSGIPath
的文件中)? (我可以用__name__=='__main__'
的单个文件来实现它;但我只是想知道我有一个不同的AWS 文件的情况;所有需要的只是定义,对吧?)
here's a good blog entry explaining how to deal with application
.以上是关于如何在 AWS Elastic Beanstalk 上配置我的 WSGI 应用程序的名称?的主要内容,如果未能解决你的问题,请参考以下文章