[英]Deploy a simple VS2017 Django app to Azure - server error
我一直在尝试使用VS2017 Preview(包括用于Visual Studio的Python工具)创建Django Web应用程序,并将生成的应用程序部署到Azure(我目前正处于30天试用期以评估Azure)。
我做了以下事情:
启动VS2017,使用“Django Web Project”模板创建一个新项目。 这将创建一个带有引导程序模板的Django网页 - 简单,一切都在本地运行良好。
在VS中,转到Connected Services => Publish,选择“Microsft Azure App Service”,创建一个新的App Service和一个App Plan。 实例已成功创建。
单击“发布”以通过VS WebDeploy发布。 在控制台中一切看起来都不错,它说Publish: 1 succeeded, 0 failed, 0 skipped
最后。
这导致标准的Azure Welcome-start-page hostingstart.html
显示,而不是Django页面。 删除该html文件后,只有一个The page cannot be displayed because an internal server error has occurred.
。 我尝试了各种各样的东西:转到portal.azure.com“应用程序设置”,将Python版本从“关闭”设置为“3.4”(事实上我想要3.5,MS的教程使用哪一个 - 但任何会做现在) - 然后只有一个hostingstart-python.html
显示,仍然没有Django。 我尝试通过VS中的“Add => New Item => Azure web.config(FastCGI)”添加默认的web.config。 我尝试使用各种值的WSGI_HANDLER
(例如django.core.handlers.wsgi.WSGIHandler()
)和DJANGO_SETTINGS_MODULE
(例如mydjangopage.settings
)编辑web.config,我尝试将“wfastcgi”添加到requirements.txt等。总是只是出现服务器错误。
我一直试图这样做几个小时,我已经阅读了Microsoft,他们的博客和网络上的每个可能的部署帮助页面。 所有信息似乎都已过时,缺少信息,或者只是不起作用。 在这一点上,我很失望,准备放弃。 难道不应该这么简单吗? 在VS中创建一个新项目,点击“发布”,它应该有效吗? (绝对不是,我从头开始多次重启并尝试了很多东西。)
我有同样的问题。 我解决了如下:
通过azure门户创建Django Web App:
部署在新创建的资源上
稍等片刻。
目前,VS 2017的发布支持处于一个过渡期。 在接下来的两次更新中,我们希望将其恢复为一键式系统(并且在此过程中,可以从任何地方发布Python应用程序,而不仅仅是在VS中),但是现在有几个手动步骤。
(我将总结以下步骤,但规范文档将在https://aka.ms/PythonOnAppService - 现在它是一篇博客文章,其中包含这些步骤和一些背景故事)
创建新站点后(通过门户网站或通过VS - 发布内容也可以),安装一个Python 站点扩展
配置web.config
文件以获得在scriptProcessor
属性中安装的站点扩展的正确路径(类似于D:\\home\\python361x64\\python.exe
- 请参阅实际路径的每个扩展的描述 - VS 2017还包括项目模板,以帮助设置这些,所以通过添加新项目的想法)
根据需要更新WSGI_HANDLER
和DJANGO_SETTINGS_MODULE
变量(对于Django应用程序, WSGI_HANDLER
的典型值是myapp.wsgi.application
,假设您的项目中有wsgi.py
文件)
通过VS发布您的网站。
使用控制台安装软件包 - 例如D:\\home\\python361x64\\python.exe -m pip install -r requirements.txt
如果事情已在运行,您可能需要在此时重新启动站点,但通常您现在可以通过VS快速发布,而无需重新安装Python或任何软件包。
如果您通过ARM使用JSON模板部署站点,还可以在那里指定站点扩展:(从此处 )
"resources": [
{
"apiVersion": "2015-08-01",
"name": "[parameters('siteName')]",
"type": "Microsoft.Web/sites",
...
"resources": [
{
"apiVersion": "2015-08-01",
"name": "python352x64",
"type": "siteextensions",
"properties": { },
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('siteName'))]"
]
},
...
在Azure上创建WebApp(不要在应用程序设置中启用python!)
将virtualenv_proxy.py
文件从https://github.com/Azure-Samples/python-docs-hello-world复制到您的文件夹中。
runtime.txt
并将python-3.4
写入其中。 web.3.4.config
文件: <configuration>
<appSettings>
<add key="WSGI_ALT_VIRTUALENV_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS"
value="D:\home\site\wwwroot\env\Scripts\python.exe" />
<add key="pythonpath" value="%SystemDrive%\home\site\wwwroot" />
<add key="WSGI_HANDLER" value="virtualenv_proxy.get_venv_handler()" />
<add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
<add key="DJANGO_SETTINGS_MODULE" value="myModule.settings" />
</appSettings>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python34\python.exe|D:\Python34\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<rewrite>
<rules>
<rule name="Static Files" stopProcessing="true">
<conditions>
<add input="true" pattern="false" />
</conditions>
</rule>
<rule name="Configure Python" stopProcessing="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" />
</conditions>
<action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
您需要在此处更改的唯一设置是DJANGO_SETTINGS_MODULE
的值,将myModule
替换为您的模块名称。 如果您创建了Web应用程序,则所有过度设置和路径应完全相同。
Python 3.4
并安装requirements.txt
所有包。 之后一切都应该有效。 如果没有,请使用ftp连接并查看\\LogFiles\\wfastcgi.log
以查找错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.