当开发服务器为 运行(在 Kudu 上)时,基于 Django 的 Azure Web 应用程序卡住
Django-based Azure Web App getting stuck when development server is run (on Kudu)
为了将应用程序从 Heroku 迁移到 Azure,我最近创建了一个 Django Azure Web 应用程序,将其连接到我的 GitHub 帐户并通过 git push azure master
将我现有的应用程序代码推送到它上面。经过一些小插曲后,我也得到了所有需要的包来正确安装(小插曲是安装需要 pythonwheels 的包)。
我还没有 运行 syncdb
应用程序(数据库托管在单独的 VM 上;它是 postgresql)。不过我确实试过运行env\scripts\python manage.py runserver
看开发服务器能不能上去。 没有; Kudu 卡住了(如下所示)。
我怎样才能把它送到运行?我的web.config文件如下:
<configuration>
<appSettings>
<add key="pythonpath" value="%SystemDrive%\home\site\wwwroot" />
<add key="WSGI_HANDLER" value="hostingstart-python.application" />
<add key="DJANGO_SETTINGS_MODULE" value="unconnectedreddit.settings" />
</appSettings>
</configuration>
我的项目名为 unconnectedreddit
,它位于 wwwroot 中。文件 manage.py
、Procfile
和 web.config
也放置在这一层。 Procfile 是 Heroku 的遗产;它包含有关在 Heroku 上 运行 的过程的代码,例如:web: newrelic-admin run-program waitress-serve --port=$PORT unconnectedreddit.wsgi:application
unconnectedreddit 文件夹(见附图)包含 settings.py
和 wsgi.py
文件。它还包含一个名为 template
的文件夹和一个名为 static
的文件夹。
应用程序文件位于 links
文件夹中(即 models.py
、views.py
、forms.py
)。
所有软件包都安装在 env/Lib/site-packages/
。
谁能解释一下我的设置缺少什么以及我该如何纠正它?也许是配置错误 web.config,也许我需要 Heroku 的 Procfile 的 Azure 等价物(尽管开发服务器真的需要它吗?),或者可能是其他原因。
如果您觉得需要,我会分享更多信息。
您将无法 运行 开发服务器,因为它需要绑定到套接字。唯一可访问的端口是 80 和 443,但是,Azure 应用服务本身已经绑定到这些端口。我建议使用 wfastcgi 配置您的应用程序。有关详细信息,请参阅此示例:
https://github.com/theadriangreen/sample-azure-website-django-app
(注意:这与 Django 的图库项目相同)
运行 Django 应用程序作为 Web 应用程序应该没问题。文档建议为应用程序设置 virtualenv,请参阅 https://azure.microsoft.com/en-us/documentation/articles/web-sites-python-create-deploy-django-app/#web-app-development---maclinux---command-line
Web.config
是不必要的,除非你需要使用 HttpPlatformHandler
。如果您有启动需求,请参阅 http://www.iis.net/learn/extensions/httpplatformhandler/httpplatformhandler-configuration-reference。
每个 Web 应用程序都分配有一个绑定 HTTP_PLATFORM_PORT
环境变量的端口号。应用服务将终止传入请求并将它们转发到指定端口。如果 Web App 由于某种原因没有 运行 Django 应用程序,您可以明确告诉 HttpPlatformHandler
如何执行该应用程序,例如通过编写 运行s python manage.py runserver 0.0.0.0:%HTTP_PLATFORM_PORT%
并让 HttpPlatformHandler
执行文件的批处理文件。
为了将应用程序从 Heroku 迁移到 Azure,我最近创建了一个 Django Azure Web 应用程序,将其连接到我的 GitHub 帐户并通过 git push azure master
将我现有的应用程序代码推送到它上面。经过一些小插曲后,我也得到了所有需要的包来正确安装(小插曲是安装需要 pythonwheels 的包)。
我还没有 运行 syncdb
应用程序(数据库托管在单独的 VM 上;它是 postgresql)。不过我确实试过运行env\scripts\python manage.py runserver
看开发服务器能不能上去。 没有; Kudu 卡住了(如下所示)。
我怎样才能把它送到运行?我的web.config文件如下:
<configuration>
<appSettings>
<add key="pythonpath" value="%SystemDrive%\home\site\wwwroot" />
<add key="WSGI_HANDLER" value="hostingstart-python.application" />
<add key="DJANGO_SETTINGS_MODULE" value="unconnectedreddit.settings" />
</appSettings>
</configuration>
我的项目名为 unconnectedreddit
,它位于 wwwroot 中。文件 manage.py
、Procfile
和 web.config
也放置在这一层。 Procfile 是 Heroku 的遗产;它包含有关在 Heroku 上 运行 的过程的代码,例如:web: newrelic-admin run-program waitress-serve --port=$PORT unconnectedreddit.wsgi:application
unconnectedreddit 文件夹(见附图)包含 settings.py
和 wsgi.py
文件。它还包含一个名为 template
的文件夹和一个名为 static
的文件夹。
应用程序文件位于 links
文件夹中(即 models.py
、views.py
、forms.py
)。
所有软件包都安装在 env/Lib/site-packages/
。
谁能解释一下我的设置缺少什么以及我该如何纠正它?也许是配置错误 web.config,也许我需要 Heroku 的 Procfile 的 Azure 等价物(尽管开发服务器真的需要它吗?),或者可能是其他原因。
如果您觉得需要,我会分享更多信息。
您将无法 运行 开发服务器,因为它需要绑定到套接字。唯一可访问的端口是 80 和 443,但是,Azure 应用服务本身已经绑定到这些端口。我建议使用 wfastcgi 配置您的应用程序。有关详细信息,请参阅此示例: https://github.com/theadriangreen/sample-azure-website-django-app
(注意:这与 Django 的图库项目相同)
运行 Django 应用程序作为 Web 应用程序应该没问题。文档建议为应用程序设置 virtualenv,请参阅 https://azure.microsoft.com/en-us/documentation/articles/web-sites-python-create-deploy-django-app/#web-app-development---maclinux---command-line
Web.config
是不必要的,除非你需要使用 HttpPlatformHandler
。如果您有启动需求,请参阅 http://www.iis.net/learn/extensions/httpplatformhandler/httpplatformhandler-configuration-reference。
每个 Web 应用程序都分配有一个绑定 HTTP_PLATFORM_PORT
环境变量的端口号。应用服务将终止传入请求并将它们转发到指定端口。如果 Web App 由于某种原因没有 运行 Django 应用程序,您可以明确告诉 HttpPlatformHandler
如何执行该应用程序,例如通过编写 运行s python manage.py runserver 0.0.0.0:%HTTP_PLATFORM_PORT%
并让 HttpPlatformHandler
执行文件的批处理文件。