我一直在尝试使用VS2017 Preview(其中包括用于Visual Studio的Python工具)创建Django Web应用程序,并将生成的应用程序部署到Azure(我目前处于30天试用期内评估Azure)。
我做了以下事情:
启动VS2017,使用" Django Web项目创建一个新项目"模板。这将创建一个带有引导程序模板的Django网页 - 简单,一切都在本地运行良好。
在VS中,转到已连接服务=>发布,选择" 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。我尝试通过"添加=>添加默认的web.config新商品=> Azure web.config(FastCGI)"在VS.我尝试使用WSGI_HANDLER
(例如django.core.handlers.wsgi.WSGIHandler()
)和DJANGO_SETTINGS_MODULE
(例如mydjangopage.settings
)的各种值编辑web.config,我尝试添加" wfastcgi"到requirements.txt等。总是只是出现服务器错误。
我一直试图这样做几个小时,我已经阅读了Microsoft,他们的博客和网络上每个可能的部署帮助页面。所有信息似乎都已过时,缺少信息,或者只是不起作用。在这一点上,我很失望,准备放弃。它不应该这么简单吗?在VS中创建一个新项目,点击"发布",它应该有效吗? (它绝对没有,我多次从头开始重做并尝试了很多东西。)
答案 0 :(得分:0)
我遇到了同样的问题。我解决了它如下:
通过azure门户创建Django Web App:
部署新创建的资源
等一下。
答案 1 :(得分:0)
目前,VS 2017中的发布支持处于一个过渡期。在接下来的两次更新中,我们希望将其恢复为一键式系统(并且在此过程中,可以从任何地方发布Python应用程序,而不仅仅是在VS中),但是现在有几个手动步骤
(我将总结以下步骤,但规范性文档将位于https://aka.ms/PythonOnAppService - 现在它是一篇包含这些步骤和一些背景故事的博客文章)
创建新网站后(通过门户网站或通过VS发布内容也可以),安装一个Python site extensions
将您的web.config
文件配置为具有scriptProcessor
属性中安装的网站扩展程序的正确路径(类似D:\home\python361x64\python.exe
- 请参阅每个扩展程序的说明实际路径 - VS 2017还包括项目模板以帮助设置它们,因此请查看添加新项目以获取创意)
根据需要更新WSGI_HANDLER
和DJANGO_SETTINGS_MODULE
变量(Django应用的WSGI_HANDLER
的典型值为myapp.wsgi.application
,假设您有{{1}你项目中的文件)
通过VS发布您的网站。
使用console安装您的软件包 - 例如wsgi.py
如果事情已经在运行,您可能需要在此时重新启动您的站点,但通常您现在可以通过VS快速发布,而无需重新安装Python或任何软件包。
如果您使用JSON模板通过ARM部署站点,还可以在那里指定站点扩展名:(来自here)
D:\home\python361x64\python.exe -m pip install -r requirements.txt
答案 2 :(得分:0)
在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
以查找错误。