我正在尝试使用MSSQL服务器将我的django应用程序发布到azure。我使用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
Data2读取WSGI处理程序时出错:Traceback(大多数 最近的呼叫最后):文件 “d:\家\网站\ wwwroot的\ ENV \ LIB \站点包\ SQL_SERVER \ pyodbc \ base.py” 第14行,在导入pyodbc中作为Database ImportError:DLL加载 失败:%1不是有效的Win32应用程序。在处理过程中 上面的异常,发生了另一个异常:Traceback(最新的 最后调用):文件“D:\ Python34 \ Scripts \ wfastcgi.py”,第711行,主要 env,handler = read_wsgi_handler(response.physical_path)文件 read_wsgi_handler中的“D:\ Python34 \ Scripts \ wfastcgi.py”,第568行 return env,get_wsgi_handler(handler_name)File get_wsgi_handler中的“D:\ Python34 \ Scripts \ wfastcgi.py”,第541行 handler = handler()文件“。\ ptvs_virtualenv_proxy.py”,第120行,in get_venv_handler handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER'))文件 “。\ ptvs_virtualenv_proxy.py”,第78行,在get_wsgi_handler处理程序中= handler()文件 “D:\ home \ site \ wwwroot \ env \ lib \ site-packages \ django \ core \ wsgi.py”,line 14,在get_wsgi_application django.setup()文件中 “D:\ home \ site \ wwwroot \ env \ lib \ site-packages \ django__init __。py”,line 18,在安装apps.populate(settings.INSTALLED_APPS)文件中 “d:\家\网站\ wwwroot的\ ENV \ LIB \站点包\ Django的\ APPS \ registry.py” 第108行,填充app_config.import_models(all_models)文件 “d:\家\网站\ wwwroot的\ ENV \ LIB \站点包\ Django的\ APPS \ config.py” 第198行,在import_models中self.models_module = import_module(models_module_name)文件 import_module中的“D:\ Python34 \ lib \ importlib__init __。py”,第109行 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,in _call_with_frames_removed文件“D:\ home \ site \ wwwroot \ env \ lib \ site-packages \ django \ contrib \ auth \ models.py”, 第41行,在类Permission(models.Model)中:File “d:\家\网站\ wwwroot的\ ENV \ LIB \站点包\ Django的\ DB \型号\ 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:\家\网站\ wwwroot的\ ENV \ LIB \站点包\ Django的\ DB \型号\ options.py” 第250行,在contrib_to_class self.db_table =中 truncate_name(self.db_table,connection.ops.max_name_length())文件 “d:\家\网站\ wwwroot的\ ENV \ LIB \站点包\ Django的\ db__init __ PY” 第36行,在 getattr 中返回getattr(connections [DEFAULT_DB_ALIAS], 项目)文件 “D:\ home \ site \ wwwroot \ env \ lib \ site-packages \ django \ db \ utils.py”,line 240,在 getitem 后端= load_backend(db ['ENGINE'])文件 “D:\ home \ site \ wwwroot \ env \ lib \ site-packages \ django \ db \ utils.py”,line 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, level)文件“”,第2254行,在_gcd_import中 文件“”,第2237行,在_find_and_load中 文件“”,第2226行,in _find_and_load_unlocked文件“”,第1200行,在_load_unlocked文件“”中,行 1129,在_exec文件“”中,第1471行,在 exec_module文件“”,第321行,in _call_with_frames_removed文件“D:\ home \ site \ wwwroot \ env \ lib \ site-packages \ sql_server \ pyodbc \ base.py”, 第16行,在提升ImproperlyConfigured(“错误加载pyodbc module:%s“%e”django.core.exceptions.ImproperlyConfigured:error 加载pyodbc模块:DLL加载失败:%1不是有效的Win32 应用。 StdOut:StdErr:
答案 0 :(得分:1)
我真的不知道Azure是如何工作的,但是在混合32位和64位驱动程序/ python组合时我遇到了这个错误。尝试使用x64位版本的python和驱动程序。
答案 1 :(得分:1)
问题是我正在发布的同事在他的环境中使用64位版本的python。很简单,但我很感激帮助。
答案 2 :(得分: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
进行部署
完成部署后,它将自动在默认浏览器中浏览您的应用程序。