将django应用程序发布到azure

时间:2015-11-03 14:55:11

标签: python django azure django-pyodbc-azure

我正在尝试使用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:

3 个答案:

答案 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进行部署

enter image description here

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