将Django应用程序与SQL数据库一起部署到Azure



我在本地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的web应用程序,但不得不从头开始重建,意外地选择了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 App">"新建">
  2. 为web应用程序命名:<webappname>
  3. 将资源组设置为与数据库相同
  4. 选择要使用Windows的操作系统
  5. 单击,部署-这将需要几分钟的时间来部署
  6. 部署后,您可以单击URLhttps://<webappname>.azurewebsites.net查看默认的azure网页
  7. 在Django项目中,转到settings.py并在"ALLOWED_HOSTS"中添加".azurewebsites.net">
  8. 在Azure门户>Web应用程序中,转到扩展并安装python3.6 x64
  9. 在门户>网络应用程序>应用程序设置中,选择"始终打开">
  10. 在settings.py set中:
    • DEBUG=os.getenv('JANGO_DEBUG')!='FALSE
    • 还将其他私有变量设置为环境变量(然后应将这些变量添加为门户>网络应用程序>应用程序设置中的键值对(例如,DJANGO_DEBUG=FALSE)
  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 repo
  16. 在门户中,在新的web应用程序中转到"部署选项">
  17. "选择源"->按照步骤,单击"完成/确定"查看部署进度并查看日志
  18. 一旦部署显示"成功",转到Kudu(http://<webappname>.scm.azurewebsites.net)>Powershell,然后运行D:homepython364x64python.exe -m pip install --upgrade -r D:homesitewwwrootrequirements.txt。这应该是成功的,并且只需要在更新包时重新运行
  19. 然后返回"部署中心",单击日志按钮,然后单击重新部署,您可能还需要重新启动web应用程序来更新环境变量(转到web应用程序>概述>重新启动)。

  20. 对于静态文件,可以在本地运行python manage.py collectstatic后提交所有管理文件,也可以这样设置静态文件,然后在Kudu)中运行D:homepython364x64python.exe D:homesitewwwrootmanage.py collectstatic

web.config文件:

<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="<django-project-name>.wsgi.application"/>
<add key="PYTHONPATH" value="D:homesitewwwroot"/>
<add key="WSGI_LOG" value="D:homeLogFileswfastcgi.log"/>
<add key="PYTHONPATH" value="D:homesitewwwroot" />
<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:homepython364x64python.exe|D:homepython364x64wfastcgi.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

请转到web应用程序的scm站点,然后尝试手动安装引发错误的模块。

有关详细步骤,请参阅本文。

相关内容

  • 没有找到相关文章

最新更新