Развертывание приложения Django с базой данных SQL в Azure - PullRequest
0 голосов
/ 31 декабря 2018

Я создал простое приложение Django на своем локальном компьютере под управлением Windows, которое подключается к SQL Server, размещенному в Azure, используя серверную часть Django-Pyodbc-Azure.Я могу нормально подключиться к базе данных на моем локальном компьютере, и мое приложение работает без проблем.

Однако я не в процессе развертывания приложения в службе приложений 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

Мой файл needs.txt выглядит так:

Django==2.1.4
django-pyodbc-azure==2.1.0.0
pyodbc==4.0.25
pytz==2018.7

И снова ...это нормально работает локально на моей машине Windows.Но я получаю эту ошибку при развертывании в Azure.

Я подозреваю, что это как-то связано с неправильной установкой бэкэнда Pyodbc в службе приложений Azure на основе LINUX?У кого-нибудь есть опыт решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я столкнулся с той же проблемой с пакетом pyodbc при использовании версии для Linux.Я использовал веб-приложение на базе Windows, но мне пришлось пересобрать его с нуля и случайно выбрал версию Linux.

После переключения на версию Windows я использовал python 3.6 и выполнил следующие действия (на основе этого блога дляразвертывание приложения фляги, https://blogs.msdn.microsoft.com/pythonengineering/2016/08/04/upgrading-python-on-azure-app-service/):

Развертывание веб-приложения Django в Azure

  1. На портале нажмите «Веб-приложение»> «Создать»
  2. Дайте веб-приложению имя: <webappname>
  3. Установите группу ресурсов, совпадающую с базой данных
  4. Выберите ОС для Windows
  5. Нажмите,развертывание - развертывание
  6. займет несколько минут. После развертывания вы можете щелкнуть URL-адрес https://<webappname>.azurewebsites.net, чтобы увидеть веб-страницу Azure по умолчанию
  7. . В проекте Django перейдите на settings.py и вв «ALLOWED_HOSTS» добавьте «.azurewebsites.net».
  8. На портале Azure> веб-приложение перейдите в Расширения и установите python3.6 x64
  9. В Портал> веб-приложение> настройки приложения выберите «Всегда включен ".
  10. В settings.py установите:
    • DEBUG = os.getenv ('DJANGO_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, запустив git status
  15. Подтвердите и отправьте изменения в ваше git repo
  16. На портале в вашем новом веб-приложении перейдите к «Развертывание»options "
  17. " Выберите источник "-> Выполните шаги и нажмите" Завершить / ОК ", чтобы увидеть ход развертывания и просмотреть журналы
  18. Когда развертывание скажет" Успешно ", перейдите к Куду (http://<webappname>.scm.azurewebsites.net)> Powershell и запустите D:\home\python364x64\python.exe -m pip install --upgrade -r D:\home\site\wwwroot\requirements.txt. Надеемся, что это будет успешным, и его нужно будет перезапустить только при обновлении пакета.
  19. Затем вернитесь к "Deployment Center », нажмите кнопку« Журналы »и нажмите« Повторно развернуть ». Возможно, вам также потребуется перезапустить веб-приложение для обновления переменных среды (перейдите в веб-приложение> обзор> перезапустить).

  20. Для статических файлов: либо зафиксируйте все файлы администратора после локального запуска python manage.py collectstatic, либо вы можете настроить статические файлы, такие как this , а затем запустить D:\home\python364x64\python.exe D:\home\site\wwwroot\manage.py collectstatic в Kudu)

файл 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>

файл needs.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
0 голосов
/ 01 января 2019

перейдите на сайт scm вашего веб-приложения, затем попробуйте вручную установить модули, которые выдают ошибку.

Подробные инструкции см. В этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...