Настройки Pivotal / Django для предоставленной пользователем базы данных MSSQL - PullRequest
0 голосов
/ 24 сентября 2019

Я развернул приложение django в Pivotal Cloud Foundry.В процессе разработки я просто придерживался встроенной базы данных sqlite, собирая пользовательский интерфейс (не нужно было сохранять данные, поэтому добавление / удаление не было проблемой).С тех пор я разработал серверную часть SQL Server на предварительном сервере (Azure ... но на предварительном).Моя организация не допускает общедоступные IP-сервисы, поэтому ничего, кроме весенних приложений в Pivotal, не разрешено.

На моем ноутбуке с Windows у меня нет проблем с обращением к базе данных (settings.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 17 для SQL Server ': файл не найден (0) (SQLDriverConnect)") "И я получаю сообщение об ошибке для любого драйвера, который я пробую...17,13, w / e ...

Я создал предоставленную пользователем службу в PCF, используя строку подключения моей базы данных.

Как мне позвонить в этот сервис, указанный пользователем, в файле settings.py?Я нашел, как это назвать, если это были услуги, предоставляемые PCF, но как бы я назвал его, поскольку это услуга, предоставляемая пользователем?

1 Ответ

0 голосов
/ 25 сентября 2019

ODBC - это просто стандартная структура для подключения к базам данных.Чтобы что-то с этим сделать, вам нужен драйвер ODBC для связи с вашей реальной базой данных.Вы пытаетесь использовать ODBC, sql_server.pyodbc, но драйвер ODBC для SQL Server не установлен в контейнере приложения, в котором выполняется ваше приложение.Держу пари, что это проприетарный драйвер, поэтому его просто нельзя установить по умолчанию.

Я специально не делал этого с Python, но у меня установлены драйверы ODBC для SQL Server для PHP , и я думаю, что это должен быть примерно тот же процесс (дайте мне знать, если это не сработает).

  1. Используйте поддержку multi-buildpack в Cloud Foundry.Сначала используйте apt-buildpack для установки драйверов ODBC.См. здесь для использования apt-buildpack .Затем используйте пакет сборки Python для фактической настройки приложения.

  2. Это файл apt.yml, который вам нужен.Он сообщает apt-buildpack, что устанавливать, и устанавливает пакеты Microsoft для их драйвера ODBC для SQL Server и mssql-tools, необязательный, но полезный для проверки вашей первоначальной настройки.

    ---
    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 в 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. Добавьте файл .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=/home/vcap/deps/0/apt/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.4.so.1.1
    UsageCount=1
    

С этим, вперед и нажмите свое приложение.Он должен сработать, и вы должны увидеть, как работают оба пакета сборки.Apt buildpack установит драйвер ODBC, а Python buildpack настроит ваше приложение.Затем ваше приложение должно запуститься и запустить.

Если у вас возникли проблемы, запустите команду cf ssh <app> -t -c "/tmp/lifecycle/launcher /home/vcap/app bash ''".Это поместит вас в контейнер и будет иметь источник всех переменных env, как для вашего приложения.Затем запустите sqlcmd -S <db-host> -U <user> и подтвердите, что вы можете подключиться к вашей БД.


Несколько последних замечаний:

  • apt buildpack понадобится доступ в Интернетзагружать пакеты из репозиториев Ubuntu и Microsoft.Это будет необходимо во время постановки.Если у вас нет доступа к Интернету из промежуточного контейнера, вам необходимо настроить прокси.

  • Ваш контейнер должен иметь возможность подключаться к базе данных.Это означает, что IP-адрес должен быть маршрутизируемым, а брандмауэры не должны блокировать доступ.Вам также может потребоваться, чтобы оператор вашей платформы добавил правило группы безопасности приложения, чтобы разрешить исходящий доступ к вашему серверу.Если вы не можете подключиться с помощью sqlcmd, это, вероятно, проблема в сети, поэтому попробуйте выполнить базовое устранение неполадок в сети, чтобы убедиться, что вы можете подключиться к вашему серверу.

Надеюсь, что это поможет!

...