1

我正在尝试使用 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因为 Database ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。在处理上述异常的过程中,又出现了一个异常: Traceback (last recent call last): File "D:\Python34\Scripts\wfastcgi.py", line 711, in main env, handler = read_wsgi_handler(response.physical_path) File " 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 handler = get_wsgi_handler(os.的 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 return getattr(connections[ DEFAULT_DB_ALIAS],项目)文件“D:\home\site\wwwroot\env\lib\site-packages\django\db\utils.py”,第 240 行,在getitembackend = load_backend(db['ENGINE']) 文件 "D:\home\site\wwwroot\env\lib\site-packages\django\db\utils.py",第 111 行,在 load_backend return import_module('%s .base' % backend_name) 文件“D:\Python34\lib\importlib__init__.py”,第 109 行,在 import_module 中 return _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\sql_server\pyodbc\base.py”中,第 16 行,在 raise ImproperlyConfigured("加载 pyodbc 模块时出错: %s" % e) django.core.exceptions.ImproperlyConfigured: 加载 pyodbc 模块时出错: DLL 加载失败: %1 不是有效的 Win32 应用程序。StdOut: StdErr:

4

3 回答 3

1

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

于 2015-11-04T19:57:25.457 回答
1

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

于 2015-11-03T15:17:12.463 回答
0

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

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部署

在此处输入图像描述

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

于 2015-11-04T05:12:40.327 回答