将简单的VS2017 Django应用程序部署到Azure - 服务器错误

时间:2017-04-19 21:50:49

标签: django azure azure-web-sites azure-web-app-service

我一直在尝试使用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中创建一个新项目,点击"发布",它应该有效吗? (它绝对没有,我多次从头开始重做并尝试了很多东西。)

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我解决了它如下:

通过azure门户创建Django Web App:

  1. 转到azure并点击左上角的“加号”以添加资源
  2. 踢“网络与移动”
  3. 点击“全部显示”
  4. 在搜索栏中输入“Django”
  5. 选择下图中标记的那个,并按照说明
  6. 创建资源

    部署新创建的资源

    1. 转到Visual Studio并开始部署
    2. 不是从VS中创建新的azure资源,而是选择刚刚为部署创建的资源。
    3. 等一下。

      1. 大约需要3分钟才能看到您的部署情况。在此之前,您将获得一个与您已经知道的屏幕略有不同的默认屏幕。
      2. 之后你应该看到正确的django页面。

答案 1 :(得分:0)

目前,VS 2017中的发布支持处于一个过渡期。在接下来的两次更新中,我们希望将其恢复为一键式系统(并且在此过程中,可以从任何地方发布Python应用程序,而不仅仅是在VS中),但是现在有几个手动步骤

(我将总结以下步骤,但规范性文档将位于https://aka.ms/PythonOnAppService - 现在它是一篇包含这些步骤和一些背景故事的博客文章)

  1. 创建新网站后(通过门户网站或通过VS发布内容也可以),安装一个Python site extensions Installing a site extension through the Azure Portal

  2. 将您的web.config文件配置为具有scriptProcessor属性中安装的网站扩展程序的正确路径(类似D:\home\python361x64\python.exe - 请参阅每个扩展程序的说明实际路径 - VS 2017还包括项目模板以帮助设置它们,因此请查看添加新项目以获取创意)

  3. 根据需要更新WSGI_HANDLERDJANGO_SETTINGS_MODULE变量(Django应用的WSGI_HANDLER的典型值为myapp.wsgi.application,假设您有{{1}你项目中的文件)

  4. 通过VS发布您的网站。

  5. 使用console安装您的软件包 - 例如wsgi.py

  6. 如果事情已经在运行,您可能需要在此时重新启动您的站点,但通常您现在可以通过VS快速发布,而无需重新安装Python或任何软件包。

    如果您使用JSON模板通过ARM部署站点,还可以在那里指定站点扩展名:(来自here

    D:\home\python361x64\python.exe -m pip install -r requirements.txt

答案 2 :(得分:0)

  1. 在Azure上创建WebApp(不要在应用程序设置中启用python!)

    从部署选项中选择local git repositorydeployment optionproperties复制git网址:enter image description here

  2. virtualenv_proxy.py文件从https://github.com/Azure-Samples/python-docs-hello-world复制到您的文件夹中。

  3. 创建一个文件runtime.txt并将python-3.4写入其中。
  4. 使用内容
  5. 创建文件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应用程序,则所有过度设置和路径应完全相同。

    1. 将所有内容推送到第1点的git网址,Azure将检测并设置Python 3.4并安装requirements.txt中的所有软件包。 之后一切都应该有效。如果没有,请使用ftp连接并查看\LogFiles\wfastcgi.log以查找错误。