用户提供的 MSSQL 数据库的 Pivotal/Django 设置

2024-02-14

我在 Pivotal Cloud Foundry 上部署了一个 django 应用程序。在开发过程中,我只是坚持使用内置的 sqlite 数据库,同时将 UI 组合在一起(不需要保留数据,因此推送/删除不是问题)。此后,我在本地服务器(Azure...但在本地)中开发了 SQL Server 后端。我的组织不允许公共 IP 服务,因此 Pivotal 中除 Spring 应用程序之外的任何内容都是不允许的。

在我的 Windows 笔记本电脑上,我与数据库 (setting.py) 通信没有问题:

'''
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'xxx.database.windows.net',
        'Port': '',
        'NAME': 'Django_Admin',
        'OPTIONS':{
            'driver': 'ODBC Driver 17 for SQL Server',
            'username': 'xxx',
            'PWD': '***', 
            'Authentication': 'ActiveDirectoryPassword',
        }
    }
}
'''

但是,当我部署到 PCF 时,收到错误“('01000', "[01000] [unixODBC][驱动程序管理器]无法打开 lib 'ODBC Driver 17 for SQL Server' : 文件未找到 (0) ( SQLDriverConnect)")" 我尝试的任何驱动程序都会出现错误...17,13,w/e...

我使用数据库的连接字符串在 PCF 中创建了用户提供的服务。

如何在我的settings.py 中调用该用户提供的服务?我找到了如果它是 PCF 提供的服务如何调用它,但是既然它是用户提供的服务,我该如何调用它呢?


ODBC 只是连接数据库的标准框架。要使用它执行任何操作,您需要一个 ODBC 驱动程序来与实际数据库通信。您正在尝试使用 ODBC,sql_server.pyodbc,但 SQL Server 的 ODBC 驱动程序未安装在运行应用程序的应用程序容器中。我敢打赌这是一个专有驱动程序,因此默认情况下无法安装它。

我还没有专门用Python做过这个,但我已经做过了为 PHP 安装 SQL Server ODBC 驱动程序 https://github.com/dmikusa-pivotal/cf-ex-php-mssql,我认为它应该是大致相同的过程(如果这不起作用,请告诉我)。

  1. 使用 Cloud Foundry 中的多构建包支持。首先使用 apt-buildpack 安装 ODBC 驱动程序。看这里是使用 apt-buildpack https://stackoverflow.com/a/46740305/1585136。然后使用 Python 构建包来实际设置您的应用程序。

  2. 这是apt.yml您想要的文件。它告诉 apt-buildpack 要安装什么,并为其 SQL Server ODBC 驱动程序和 mssql-tools 安装 Microsoft 软件包,这是可选的,但有助于验证您的初始设置。

    ---
    keys:
    - https://packages.microsoft.com/keys/microsoft.asc
    repos:
    - deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main
    packages:
    - msodbcsql17
    - mssql-tools
    - unixodbc-dev
    
  3. 然后使用像这样的manifest.yml 文件来推送您的应用程序。这将设置 apt-buildpack 首先运行并安装上面的依赖项。然后它将运行 Python 构建包。它还将绑定您的 MSSQL 服务,并设置 env 变量ACCEPT_EULA to Y这是必需的,以便 apt-buildpack 可以安装 Microsoft 软件包,而无需您手动接受其 EULA。

    ---
    applications:
    - name: <app-name>
      buildpacks:
      - https://github.com/cloudfoundry/apt-buildpack
      - python_buildpack
      env:
        ACCEPT_EULA: Y
      services:
      - mssql-server-db
    
  4. Add a .profile将此内容的文件保存到项目的根目录,即从您运行的位置cf push。这会将 mssqltools 放在路径上,并告诉 unixODBC 在哪里可以找到 ODBC 配置。

    # the 0 indicates that apt-buildpack is the first in the list
    #  if you change the order of buildpacks you need to update this too
    export PATH=$PATH:/home/vcap/deps/0/apt/opt/mssql-tools/bin/
    
    # point to the odbcinst.ini file
    #  that file needs to have the correct path to the ODBC driver shared library
    #  it should be right, but if you change the order of the buildpacks then that
    #  would need updated too
    export ODBCSYSINI=$HOME/odbc-cfg/
    
  5. 最后建立一个文件夹odbc-cfg(或者无论你想怎么称呼它,它只需要匹配为ODBCSYSINI在步骤 #4 中)也在项目的根目录中。里面放了文件,odbcinst.ini。里面放了这个信息。这将设置驱动程序。

    [ODBC Driver 17 for SQL Server]
    Description=Microsoft ODBC Driver 17 for SQL Server
    Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1
    UsageCount=1
    

这样,就可以继续推送您的应用程序了。它应该会运行,并且您应该会看到两个构建包都在运行。 Apt buildpack 将安装 ODBC 驱动程序,Python buildpack 将设置您的应用程序。然后您的应用程序应该启动并运行。

如果遇到问题,请运行命令cf ssh <app> -t -c "/tmp/lifecycle/launcher /home/vcap/app bash ''"。这会将您放入容器中,并拥有所有环境变量源,就像您的应用程序一样。然后运行sqlcmd -S <db-host> -U <user>并验证您是否可以连接到数据库。


最后一些注意事项:

  • apt buildpack 将需要互联网访问才能从 Ubuntu 和 Microsoft 存储库下载软件包。这将在暂存时需要。如果您无法从暂存容器访问互联网,则需要配置代理。

  • 您的容器需要能够连接到数据库。这意味着 IP 必须可路由,并且没有防火墙阻止访问。您可能还需要让平台运营商添加应用程序安全组规则以允许对您的服务器进行出站访问。如果您无法连接sqlcmd,这可能是网络问题,因此请尝试基本的网络故障排除,以确保您可以连接到服务器。

  • Microsoft ODBC 驱动程序的版本将会更改。当你读到这篇文章时,它可能会更新。当前版本反映了发布此更新时的版本。

希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户提供的 MSSQL 数据库的 Pivotal/Django 设置 的相关文章

随机推荐