【问题标题】:Getting server error upon publishing django application to azure将 django 应用程序发布到 azure 时出现服务器错误
【发布时间】:2016-02-03 18:50:54
【问题描述】:

我正在尝试使用 MSSQL 服务器将我的 django 应用程序发布到天蓝色。我正在使用 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': '',
    }
}

我已将 webapp 的传出 IP 地址添加到服务器,希望这是问题所在,但事实并非如此。检查诊断日志后,我发现比 500 错误更详细的解释,但我不确定我是否理解它。

 ModuleName FastCgiModule

 Data1 FASTCGI_RESPONSE_ERROR

读取 WSGI 处理程序时发生 Data2 错误:Traceback(大多数 最近通话最后):文件 "D:\home\site\wwwroot\env\lib\site-packages\sql_server\pyodbc\base.py", 第 14 行,在 import pyodbc as Database ImportError: DLL load 失败: %1 不是有效的 Win32 应用程序。处理过程中 上述异常,发生了另一个异常:Traceback(最近 最后调用):文件“D:\Python34\Scripts\wfastcgi.py”,第 711 行,在 main env, handler = read_wsgi_handler(response.physical_path) 文件 “D:\Python34\Scripts\wfastcgi.py”,第 568 行,在 read_wsgi_handler 中 返回 env,get_wsgi_handler(handler_name) 文件 “D:\Python34\Scripts\wfastcgi.py”,第 541 行,在 get_wsgi_handler 中 handler = handler() 文件“.\ptvs_virtualenv_proxy.py”,第 120 行,在 get_venv_handler 处理程序 = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) 文件 “.\ptvs_virtualenv_proxy.py”,第 78 行,在 get_wsgi_handler 处理程序 = 处理程序()文件 “D:\home\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、在设置apps.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(models_module_name) 文件 “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 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:\home\site\wwwroot\env\lib\site-packages\django\db\models\options.py", 第 250 行,contribute_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(connections[DEFAULT_DB_ALIAS], 项目)文件 “D:\home\site\wwwroot\env\lib\site-packages\django\db\utils.py”,行 240,在 getitem 后端 = 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 return _bootstrap._gcd_import(name[level:], package, 级别)文件“”,第 2254 行,在 _gcd_import 中 _find_and_load 中的文件“”,第 2237 行 文件“”,第 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\sql_server\pyodbc\base.py", 第 16 行,在 raise ImproperlyConfigured("Error loading pyodbc 模块:%s" % e) django.core.exceptions.ImproperlyConfigured:错误 加载 pyodbc 模块:DLL 加载失败:%1 不是有效的 Win32 应用。标准输出:标准错误:

【问题讨论】:

  • 我正在使用 32 位版本的 python 以及 pyodbc -- pyodbc-3.0.10-cp34-none-win32.whl

标签: python django azure django-pyodbc-azure


【解决方案1】:

我真的不知道 Azure 是如何工作的,但是在混合 32 位和 64 位驱动程序/python 组合时出现此错误。尝试使用 x64 位版本的 python 和驱动程序。

【讨论】:

    【解决方案2】:

    我无法重现您的问题,但我对您的软件包和版本进行了测试。我使用 Visual Studio 将 Django 应用程序发布到 Azure Web Apps,效果很好。以下是我的步骤供您参考: 1,创建一个空的Web App并从本地Git repo设置部署

    2、在Visual Studio中创建一个Django应用,用python 3.4添加虚拟环境,然后安装python包,这里是requirements.txt中的内容: Django==1.8.4 pyodbc==3.0.10 django-pyodbc-azure==1.8.3.0

    3、在Azure上修改数据库设置为MSSQL,在本地按F5测试

    4、右键Django应用项目名,点击publish进行部署

    完成部署后,它会自动在默认浏览器中浏览您的应用程序。

    【讨论】:

      【解决方案3】:

      问题是我正在发布的同事在他的环境中使用 64 位版本的 python。很简单,但我感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 2015-09-02
        相关资源
        最近更新 更多