我已经在本地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的应用程序服务上有关吗?有人有解决这个问题的经验吗?
答案 0 :(得分:1)
使用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/):
<webappname>
https://<webappname>.azurewebsites.net
以查看默认的天蓝色网页settings.py
,然后在“ ALLOWED_HOSTS”中添加“ .azurewebsites.net”。OPTIONS[driver] = 'SQL Server Native Client 11.0'
OPTIONS[MARS_Connection] = 'True'
ptvs_virtual_proxy.py
.SkipPythonDeployment
web.config
确保您拥有key="DJANGO_SETTINGS_MODULE" value "<django-project-name>.settings"
(见下文)pip freeze
并将内容放入requirements.txt
(见下文)git status
http://<webappname>.scm.azurewebsites.net
)> Powershell,然后运行D:\home\python364x64\python.exe -m pip install --upgrade -r D:\home\site\wwwroot\requirements.txt
,这应该会成功,并且只有在更新软件包时才需要重新运行。然后返回到“部署中心”并单击日志按钮,然后单击重新部署,您可能还需要重新启动Web应用程序以更新环境变量(转到Webapp>概述>重新启动)。
对于静态文件,可以在本地运行python manage.py collectstatic
后提交所有管理文件,也可以设置this之类的静态文件,然后在Kudu中运行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
答案 1 :(得分:0)
请转到您的Web应用程序的scm站点,然后尝试手动安装引发错误的模块。
有关详细步骤,请参阅此article。