如何在 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 应用程序的名称?的主要内容,如果未能解决你的问题,请参考以下文章