首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带有SQL数据库的Django应用程序部署到Azure

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

Stack Overflow用户
提问于 2018-12-31 23:33:34
回答 2查看 1.7K关注 0票数 2

我已经在我本地的Windows机器上构建了一个简单的Django应用程序,它通过利用Django-Pyodbc-Azure后端连接到托管在Azure上的SQL Server。我可以在我的本地机器上很好地连接到数据库,我的应用程序运行也没有问题。

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

代码语言:javascript
复制
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文件如下所示:

代码语言:javascript
复制
Django==2.1.4
django-pyodbc-azure==2.1.0.0
pyodbc==4.0.25
pytz==2018.7

再一次..。这在我的Windows机器上运行得很好。但是当我部署到Azure时,我得到了这个错误。

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

EN

回答 2

Stack Overflow用户

发布于 2019-01-09 18:34:29

在使用Linux版本时,我在pyodbc包中遇到了同样的问题。我使用的是基于Windows的web-app,但不得不从头开始重建,意外地选择了Linux版本。

一旦切换回Windows版本,我使用Python3.6并遵循以下步骤(基于部署flask应用程序的博客https://blogs.msdn.microsoft.com/pythonengineering/2016/08/04/upgrading-python-on-azure-app-service/):

将Django web应用程序部署到Azure

在门户中点击"Web App">"New"

  • Give ".azurewebsites.net".

  • In
  1. a name:<webappname>
  2. Set
  3. to to as database
  4. Select OS to be Windows
    1. Click,deploy -这将花费几分钟来部署web应用程序-这将花费几分钟来部署部署一旦部署好,您可以单击URL来查看默认的Azure网页,在您的Django项目中,转到
    2. 并在“settings.py”中添加
      1. portal>webapp,转到扩展并安装python3.6 x64
      2. 在门户网站> webapp >应用程序设置中,选择"Always on“。
      3. in settings.py set:
        • DEBUG = os.getenv(' DJANGO_DEBUG ') !=‘FALSE’
        • 还将其他私有变量设置为环境变量(这些变量应作为键值对(例如DJANGO_DEBUG= FALSE)添加到Portal>webapp>Application settings>Application设置中。

此外,要连接到数据库,请将数据库设置为:

  • OPTIONS[driver] = 'SQL Server Native Client 11.0'
  • OPTIONS[MARS_Connection] = 'True'

请确保django项目的基目录中有以下文件:

  • ptvs_virtual_proxy.py
  • .SkipPythonDeployment
  • web.config确保您有key="DJANGO_SETTINGS_MODULE" value "<django-project-name>.settings" (请参见below)

  1. 在您的本地项目中,运行pip freeze并将内容放入requirements.txt (如下所示)
  2. 通过运行options"
  3. "Choose检查所有迁移文件是否已添加到git中,并将更改推送到您的git repo
  4. 门户中,在新的web应用中,转到"Deployment
  5. Source“->按照步骤单击"Finish/Ok”查看部署进度并查看日志

<pip freeze>H174requirements.txt>一旦部署说“成功”,请转到Kudu (<代码>D75),然后运行<代码>D76。这应该是成功的,并且只需要在您更新package.

  1. Then时重新运行。回到“部署中心”,单击“日志”按钮,然后单击“重新部署”,您可能还需要重新启动web应用程序来更新环境变量(转到webapp>overview>restart).
  2. For静态文件,或者在本地运行python manage.py collectstatic之后提交所有管理文件,或者您可以设置静态文件,如this,然后在Kudu中运行D:\home\python364x64\python.exe D:\home\site\wwwroot\manage.py collectstatic )

web.config文件:

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-01-01 10:00:22

请转到您的web应用的scm站点,然后尝试手动安装抛出错误的模块。

具体操作步骤请参考此article

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53989068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档