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

如何在 AWS Elastic Beanstalk 上修改 Nginx 配置

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 中更改数据库配置

如何在 AWS Elastic Beanstalk 中选择特定平台?

如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?