gpt4 book ai didi

django - 将带有 SQL 数据库的 Django 应用程序部署到 Azure

转载 作者:行者123 更新时间:2023-12-02 07:07:12 28 4
gpt4 key购买 nike

我在本地 Windows 计算机上构建了一个简单的 Django 应用程序,该应用程序利用 Django-Pyodbc-Azure 后端连接到 Azure 上托管的 SQL Server。我能够在本地计算机上正常连接到数据库,并且我的应用程序运行没有问题。

但是,我没有将应用程序部署到 Azure 的应用服务,并且遇到了问题。部署本身运行没有问题,但是我的日志中显示以下错误消息:

Traceback (most recent call last): File "/home/site/wwwroot/antenv3.6/lib/python3.6/site-packages/sql_server/pyodbc/base.py", line 15, in <module>
import pyodbc as Database
ImportError: libodbc.so.2: cannot open shared object file: No such file or directory

File "/home/site/wwwroot/antenv3.6/lib/python3.6/site-packages/sql_server/pyodbc/base.py", line 17, in <module>
raise ImproperlyConfigured("Error loading pyodbc module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading pyodbc module: libodbc.so.2: cannot open shared object file: No such file or directory

我的requirements.txt 文件如下所示:

Django==2.1.4
django-pyodbc-azure==2.1.0.0
pyodbc==4.0.25
pytz==2018.7

再说一次...这在我的 Windows 计算机上本地运行良好。但是当我部署到 Azure 时出现此错误。

我怀疑这与 Pyodbc 后端未正确安装在 Azure 的基于 LINUX 的应用服务上有关?有人有解决这个问题的经验吗?

最佳答案

在使用 Linux 版本时,我在 pyodbc 软件包中遇到了同样的问题。我使用的是基于 Windows 的网络应用程序,但不得不从头开始重建,并意外选择了 Linux 版本。

切换回 Windows 版本后,我使用了 python 3.6 并按照以下步骤操作(基于此部署 Flask 应用程序的博客,https://blogs.msdn.microsoft.com/pythonengineering/2016/08/04/upgrading-python-on-azure-app-service/):

将 Django Web 应用部署到 Azure

  1. 在门户中点击“Web 应用程序”>“新建”
  2. 为网络应用程序命名:<webappname>
  3. 将资源组设置为与数据库相同
  4. 选择操作系统为 Windows
  5. 点击,部署 - 部署需要几分钟时间
  6. 部署后,您可以单击 URL https://<webappname>.azurewebsites.net查看默认的 azure 网页
  7. 在您的 Django 项目中,转到 settings.py并在“ALLOWED_HOSTS”中添加“.azurewebsites.net”。
  8. 在 Azure 门户>webapp 中,转到“扩展”并安装 python3.6 x64
  9. 在门户 > 网络应用 > 应用程序设置中,选择“始终开启”。
  10. 在settings.py中设置:
    • DEBUG = os.getenv('DJANGO_DEBUG') != 'FALSE'
    • 还将其他私有(private)变量设置为环境变量(然后应将这些变量作为键值对(例如 DJANGO_DEBUG = FALSE)添加到 Portal>webapp>Application settings>Application settings 中。
  11. 此外,要连接到 SQL 数据库,请将数据库设置设置为:
    • OPTIONS[driver] = 'SQL Server Native Client 11.0'
    • OPTIONS[MARS_Connection] = 'True'
  12. 确保 django 项目的基目录中有以下文件:
    • ptvs_virtual_proxy.py
    • .SkipPythonDeployment
    • web.config确保您有key="DJANGO_SETTINGS_MODULE" value "<django-project-name>.settings" (见下文)
  13. 在您的本地项目中,运行 pip freeze并将内容放入 requirements.txt (见下文)
  14. 通过运行 git status 检查所有迁移文件是否已添加到 git
  15. 提交更改并将其推送到您的 git 存储库
  16. 在门户中的新网络应用中,转到“部署选项”
  17. “选择源”-> 按照步骤操作并单击“完成/确定”以查看部署进度并查看日志
  18. 部署显示“成功”后,转到 Kudu ( http://<webappname>.scm.azurewebsites.net )>Powershell,然后运行 ​​D:\home\python364x64\python.exe -m pip install --upgrade -r D:\home\site\wwwroot\requirements.txt ,这应该会成功,并且只需要在更新包时重新运行。
  19. 然后返回“部署中心”并单击日志按钮,然后单击重新部署,您可能还需要重新启动Web应用程序以更新环境变量(转到Web应用程序>概述>重新启动)。

  20. 对于静态文件,可以在本地运行后提交所有管理文件 python manage.py collectstatic或者您可以设置静态文件,例如 this ,然后运行D:\home\python364x64\python.exe D:\home\site\wwwroot\manage.py collectstatic捻角羚)

web.config 文件:

<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="<django-project-name>.wsgi.application"/>
<add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
<add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
<add key="PYTHONPATH" value="D:\home\site\wwwroot" />
<add key="DJANGO_SETTINGS_MODULE" value="<django-project-name>.settings" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpErrors errorMode="Detailed"></httpErrors>
<handlers>
<add name="PythonHandler" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\python364x64\python.exe|D:\home\python364x64\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>

requirements.txt 文件:

cycler==0.10.0
Django==1.11.15
django-pyodbc-azure==1.11.15.0
djangorestframework==3.6.3
djangorestframework-jsonp==1.0.2
pyodbc==4.0.25

关于django - 将带有 SQL 数据库的 Django 应用程序部署到 Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53989068/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com