【问题标题】:Deploy a simple VS2017 Django app to Azure - server error将简单的 VS2017 Django 应用程序部署到 Azure - 服务器错误
【发布时间】:2017-04-19 21:50:49
【问题描述】:

我一直在尝试使用 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、他们的博客和 Web 的所有可能的部署帮助页面。所有信息似乎都已过时,缺少信息,或者只是无法正常工作。在这一点上,我很失望,准备放弃。不应该这么简单吗?在 VS 中创建一个新项目,点击“发布”,它应该可以工作吗? (肯定不是,我从零开始多次重启,试了很多次。)

【问题讨论】:

  • stackoverflow.com/questions/32792236/… 是相关的,但只讨论通过 git 部署。我正在尝试使用 Visual Studio 的“Web Deploy”从 VS 内部进行部署。
  • 我的建议:PyCharm 在各个方面都比 VS2017 好一百倍。我已经使用 VS2017 2 个月了,没有比 PyCharm 更好的地方了。我刚刚使用了Ryder 和 OMG,这对 Microsoft 团队来说真是一记耳光。我已经清理了我所有的项目,现在它在 20 分钟内看起来更干净(因此更容易调试)。所有的建议都很好,而且 VS2017 没有提出任何有价值的建议。更不用说快捷和无意义的 UI(我可以举出至少 10 个例子,说明为什么 VS2017 与 Jetbrains 产品相比如此糟糕)。
  • 我的意思是:用 PyCharm 做一个 Django 项目(试用专业版/30 天试用版),你会爱上 Python、Django 和调试。 VS2017 并非如此(相反!)。
  • @OlivierPons:在发布这个问题之前,我确实做到了。 PyCharm 对 Python 来说很棒,对 Django 也很好,但是部署到 Azure 并不是很好(这是这个问题的目标)。我想要的是用 Django 开发站点并部署到 Azure 的尽可能简单的集成体验。事实证明,世界上没有什么是简单的 (;-) ) 并且这两种工具都无法做到这一点。
  • 很高兴知道谢谢分享这个

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


【解决方案1】:

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

通过 azure 门户创建 Django Web 应用:

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

部署在新创建的资源上

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

等一下。

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

【讨论】:

  • 它还不能完全工作(还)。部署并等待后,您会看到已部署的 django 页面,但它仍在使用一些旧文件。例如。访问我在 VS 中添加并发布的 Django 视图时出现错误:Using the URLconf defined in DjangoApp.urls。所以它仍然使用旧的 .urls 文件。 Azure 上可能还有更多旧文件。
  • 如果我在 azure 上编辑 web.config,将 DJANGO_SETTINGS_MODULE DjangoApp.settings 替换为 mytutorial.settings (显然 mytutorial 是我在 VS 中创建的 Django 项目),然后再次出现服务器错误.所以乍一看,你的答案似乎有效,但如果你真的尝试过,你会发现很遗憾不是。
  • 这是一个不同的问题,但我遇到了同样的问题。你找到解决办法了吗?
  • 我只是尝试删除 azure 上的网络应用程序并从头开始。如上所述,我在另一个区域创建了一个新的 Django Web 应用程序,但仍然收到了旧版本的页面。真是一团糟!
  • 为什么会有不同的问题?不,我没有找到解决方案,坦率地说,我停止了寻找——我已经为此花费了几个工作日,所以此时我放弃了 Azure,并在此处发布了问题。不过,我真的很想得到一个答案,并给 Azure 一个机会 - 很遗憾它不起作用。
【解决方案2】:
  1. 在 Azure 上创建一个 WebApp(不要在应用程序设置中启用 python!)

    从部署选项中选择local git repositoryproperties复制git url:

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

  3. 创建一个文件runtime.txt并将python-3.4写入其中。

  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 应用程序,所有的设置和路径应该完全相同。

  1. 将所有内容推送到您在第 1 点获得的 git url,Azure 将检测并设置 Python 3.4 并安装来自 requirements.txt 的所有包。 之后,一切都应该工作。如果没有,请使用 ftp 连接并查看 \LogFiles\wfastcgi.log 是否有错误。

【讨论】:

    【解决方案3】:

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

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

    1. 创建新站点后(通过门户或通过 VS - 发布内容也可以),安装 Python site extensions 之一
      (来源:windows.net

    2. 配置您的 web.config 文件,使其具有指向您在 scriptProcessor 属性中安装的站点扩展的正确路径(类似于 D:\home\python361x64\python.exe - 请参阅每个扩展的描述以了解实际路径 - VS 2017 还包括项目模板帮助设置这些,因此请查看添加新项目以获取想法)

    3. 根据需要更新 WSGI_HANDLERDJANGO_SETTINGS_MODULE 变量(对于 Django 应用程序,WSGI_HANDLER 的典型值为 myapp.wsgi.application,假设您的项目中有一个 wsgi.py 文件)

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

    5. 使用console 安装您的软件包 - 例如D:\home\python361x64\python.exe -m pip install -r requirements.txt

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

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

    "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'))]"
            ]
          },
        ...
    

    【讨论】:

    • 不幸的是它不起作用。您能否澄清一下这些步骤: 1.:如果我通过门户进行,添加一个常规的“Web App”还是哪个?如果我想在 VS 中执行此操作,“或通过 VS - 发布内容也可以)”是什么意思 - 请说明如何执行? PS:在 Azure 门户上安装 Python 扩展失败(据说超时),但现在仍显示在扩展下。 2.:我在 VS Add=>New item => Azure web.config (FastCGI) 中做了。这是正确的,或者如何获得web.config? 3.:我在 Azure 上还没有 requirements.txt,我想我需要先发布吗?
    • 您能否也请澄清一下2:它有一个密钥PYTHONPATH,但它需要一个文件夹,而不是python.exe。想必我需要在PythonHandler下添加Extension python的路径?我也应该将WSGI_HANDLER 保留为app.wsgi_app 还是输入我的Django 应用程序的名称?我什至见过 Django.something.GetWSGI() 之类的东西?我还需要为MyDjangoApp.settings 添加密钥吗?
    • @Ela782 1. 是的,常规网络应用程序。如果您不想选择现有的,VS 有一个创建向导。 2. 没错。 PYTHONPATH 是包搜索路径,scriptProcessor 指向 EXE,WSGI_HANDLER 应该是 myapp.wsgi.application(除非你改变了这个) 3. 好点,我将交换步骤 3 和 4。跨度>
    • 顺便说一下,安装 Python 扩展有一半时间会失败,几分钟后就会超时。真烦人。 Azure 还没有为黄金时间和快速开发做好准备。这发生在数天、数周内,我什至尝试了不同的浏览器(Edge 和 Chrome)。有时扩展程序似乎仍然显示为已安装且可用,即使它说安装失败。并没有真正激发对整个事情的信心。
    • 安装 requirements.txt 失败:D:\home\python353x64\python.exe -m pip install -r requirements.txt Bad Request 我仍然坚持这一点 - 只是不起作用。 @Zooba 您可以自己尝试一下并提供更详细的分步指南吗?
    猜你喜欢
    • 2013-07-22
    • 2018-02-05
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多