Ошибка сервера при публикации приложения django в Azure

Я пытаюсь опубликовать свое приложение django на Azure на сервере MSSQL. Я использую django-azure-pyodbc с pyodbc для подключения, и хотя он работает локально, всякий раз, когда я публикуюсь с mssql, я получаю внутреннюю ошибку сервера, хотя публикация завершается успешно. Если я опубликую с сервером sqllite3, который идет в комплекте, он работает. Я использую виртуальную среду с Python 3.4, Django 1.8.4, pyodbc 3.0.10 и django-pyodbc-azure 1.8.3.0. Мой файл settings.py выглядит следующим образом.

DATABASES = {
   'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'db_name',
        'USER': 'u_name',
        'PASSWORD': 'p_word',
        'HOST': 'host.database.windows.net',
        'PORT': '',
    }
}

Я добавил исходящие IP-адреса веб-приложения на сервер, надеясь, что это проблема, но это не так. После проверки журналов диагностики я нашел более подробное объяснение, чем ошибка 500, но я не уверен, что понимаю это.

 ModuleName FastCgiModule

 Data1 FASTCGI_RESPONSE_ERROR

Ошибка Data2 при чтении обработчика WSGI: трассировка (последний последний вызов): файл "D:\home\site\wwwroot\env\lib\site-packages\sql_server\pyodbc\base.py", строка 14, в импорте pyodbc как Ошибка импорта базы данных: сбой загрузки DLL: %1 не является допустимым приложением Win32. Во время обработки вышеупомянутого исключения произошло другое исключение: обратная связь (последний вызов был последним): файл "D:\Python34\Scripts\wfastcgi.py", строка 711, в главном env, handler = read_wsgi_handler(файл response.physical_path) " D: \ Python34 \ Scripts \ wfastcgi.py ", строка 568, в read_wsgi_handler возвращает env, get_wsgi_handler(имя-обработчика) Файл" D: \ Python34 \ Scripts \ wfastcgi.py ", строка 541, в обработчике get_wsgi_handler = обработчик () файл" " \site\wwwroot\env\lib\site-packages\django\core\wsgi.py", строка 14, в get_wsgi_application django.setup(), файл" D: \ home \ site \ wwwroot \ env \ lib \ site-packages " \django__init__.py", строка 18, в файле setup app.populate(settings.INSTALLED_APPS) файла"D:\home\site\wwwroot\env\lib\site-packages\django\apps\registry.py", строка 108, в заполнить app_config.import_ Файл models(all_models) "D:\home\site\wwwroot\env\lib\site-packages\django\apps\config.py", строка 198, в import_models self.models_module = import_module(имя_моделя_моделей) Файл "D:\Python34\lib\importlib__init__. Py ", строка 109, в файле import_module возвращает _bootstrap._gcd_import(name[level:], package, level) Файл" ", строка 2254, в файле _gcd_import" ", строка 2237, в файле _find_and_load" " строка 2226, в файле _find_and_load_unlocked "", строка 1200, в файле _load_unlocked "", строка 1129, в файле _exec "", строка 1471, в файле exec_module "", строка 321, в файле _call_with_frames_removed "D: \ home \ site" \wwwroot\env\lib\site-packages\django\contrib\auth\models.py", строка 41, в классе Permission(models.Model): файл" D: \ home \ site \ wwwroot \ env \ lib \ site " -packages\django\db\models\base.py", строка 139, в новом new_class.add_to_class('_meta', Options(meta, **kwargs)) Файл"D:\home\site\wwwroot\env\lib\site-packages\django\db\models\base.py", строка 324, в add_to_class value.contribute_to_class(cls, name) Файл" D: \ h " ome\site\wwwroot\env\lib\site-packages\django\db\models\options.py", строка 250, в contrib_to_class self.db_table = truncate_name(файл self.db_table, connection.ops.max_name_length())"D:\home\site\wwwroot\env\lib\site-packages\django\db__init__. Py ", строка 36, в getattr возвращает getattr(соединения [DEFAULT_DB_ALIAS], элемент) Файл" D: \ home \ site \ wwwroot \ " env\lib\site-packages\django\db\utils.py", строка 240, в getitem backend = load_backend (db ['ENGINE']) Файл"D:\home\site\wwwroot\env\lib\site-packages\django\db\utils.py", строка 111, в load_backend возвращает import_module('%s.base' % backend_name) Файл"D:\Python34\lib\importlib__init__.py", строка 109, в import_module возвращает _bootstrap. _gcd_import (имя [уровень:], пакет, уровень) Файл "", строка 2254, в файле _gcd_import "", строка 2237, в файле _find_and_load "", строка 2226, в файле _find_and_load_unlocked "", строка 1200, в файле _load_unlocked " ", строка 1129, в файле _exec" ", строка 1471, в файле exec_module" ", строка 321, в файле _call_with_frames_removed File "D:\home\site\wwwroot\env\lib\site-packages\sql_server\pyodbc\base.py", строка 16, в IncreaselyConfigured("Ошибка загрузки модуля pyodbc: %s" % e) django.core.exceptions.ImproperlyConfigured: Ошибка при загрузке модуля pyodbc: сбой загрузки DLL: %1 не является допустимым приложением Win32. StdOut: StdErr:

3 ответа

Решение

На самом деле я не знаю, как работает Azure, но я получил эту ошибку при смешении 32- и 64-битных комбо драйверов /python. Попробуйте использовать 64-битную версию Python и драйвер.

Проблема заключалась в том, что мой коллега, который публикует, использовал 64-битную версию python в своей среде. Достаточно просто, но я ценю помощь.

Я не могу воспроизвести вашу проблему, но я проверил ваши пакеты и версии. И я использовал Visual Studio для публикации приложения Django в Azure Web Apps, оно работало нормально. Вот мои шаги для справки: 1. Создайте пустое веб-приложение и настройте развертывание из локального репозитория Git.

2. Создайте приложение Django в Visual Studio, добавьте виртуальную среду с Python 3.4, затем установите пакеты Python, вот содержимое в requirements.txt: Django==1.8.4 pyodbc==3.0.10 django-pyodbc-azure==1.8.3.0

3. Измените настройки базы данных на MSSQL в Azure, нажмите F5 для проверки на локальном

4, щелкните правой кнопкой мыши имя проекта приложения Django, нажмите publish развернуть

После завершения развертывания приложение автоматически просмотрит ваше приложение в браузере по умолчанию.

Другие вопросы по тегам