2015-11-03 59 views
1

我正嘗試將我的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文件如下。在將django應用程序發佈到azure時出現服務器錯誤

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

我已經添加了Web應用程序的傳出IP地址到服務器希望這是問題,但事實並非如此。在檢查診斷日誌後,我發現比500錯誤更詳細的解釋,但我不確定我是否理解它。

ModuleName FastCgiModule 

Data1 FASTCGI_RESPONSE_ERROR 

Data2 Error occurred while reading WSGI handler: Traceback (most recent call last): File "D:\home\site\wwwroot\env\lib\site-packages\sql_server\pyodbc\base.py", line 14, in import pyodbc as Database ImportError: DLL load failed: %1 is not a valid Win32 application. During handling of the above exception, another exception occurred: Traceback (most 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", line 568, in read_wsgi_handler return env, get_wsgi_handler(handler_name) File "D:\Python34\Scripts\wfastcgi.py", line 541, in get_wsgi_handler handler = handler() File ".\ptvs_virtualenv_proxy.py", line 120, in get_venv_handler handler = get_wsgi_handler(os.getenv('WSGI_ALT_VIRTUALENV_HANDLER')) File ".\ptvs_virtualenv_proxy.py", line 78, in get_wsgi_handler handler = handler() File "D:\home\site\wwwroot\env\lib\site-packages\django\core\wsgi.py", line 14, in get_wsgi_application django.setup() File "D:\home\site\wwwroot\env\lib\site-packages\django__init__.py", line 18, in setup apps.populate(settings.INSTALLED_APPS) File "D:\home\site\wwwroot\env\lib\site-packages\django\apps\registry.py", line 108, in populate app_config.import_models(all_models) File "D:\home\site\wwwroot\env\lib\site-packages\django\apps\config.py", line 198, in import_models self.models_module = import_module(models_module_name) File "D:\Python34\lib\importlib__init__.py", line 109, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 2254, in _gcd_import File "", line 2237, in _find_and_load File "", line 2226, in _find_and_load_unlocked File "", line 1200, in _load_unlocked File "", line 1129, in _exec File "", line 1471, in exec_module File "", line 321, in _call_with_frames_removed File "D:\home\site\wwwroot\env\lib\site-packages\django\contrib\auth\models.py", line 41, in class Permission(models.Model): File "D:\home\site\wwwroot\env\lib\site-packages\django\db\models\base.py", line 139, in new new_class.add_to_class('_meta', Options(meta, **kwargs)) File "D:\home\site\wwwroot\env\lib\site-packages\django\db\models\base.py", line 324, in add_to_class value.contribute_to_class(cls, name) File "D:\home\site\wwwroot\env\lib\site-packages\django\db\models\options.py", line 250, in contribute_to_class self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) File "D:\home\site\wwwroot\env\lib\site-packages\django\db__init__.py", line 36, in getattr return getattr(connections[DEFAULT_DB_ALIAS], item) File "D:\home\site\wwwroot\env\lib\site-packages\django\db\utils.py", line 240, in getitem backend = load_backend(db['ENGINE']) File "D:\home\site\wwwroot\env\lib\site-packages\django\db\utils.py", line 111, in load_backend return import_module('%s.base' % backend_name) File "D:\Python34\lib\importlib__init__.py", line 109, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 2254, in _gcd_import File "", line 2237, in _find_and_load File "", line 2226, in _find_and_load_unlocked File "", line 1200, in _load_unlocked File "", line 1129, in _exec File "", line 1471, in exec_module File "", line 321, in _call_with_frames_removed File "D:\home\site\wwwroot\env\lib\site-packages\sql_server\pyodbc\base.py", line 16, in raise ImproperlyConfigured("Error loading pyodbc module: %s" % e) django.core.exceptions.ImproperlyConfigured: Error loading pyodbc module: DLL load failed: %1 is not a valid Win32 application. StdOut: StdErr:

+0

我使用的是32位版本的python以及pyodbc-pyodbc-3.0.10-cp34-none-win32.whl – Jason

回答

1

我真的不知道該怎麼Azure的作品,但混合32位和64位的驅動程序/ Python的組合的,當我得到這個錯誤。嘗試使用Python的x64位版本和驅動程序。

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,修改數據庫設置以MSSQL在Azure上,按F5測試本地

4,右鍵單擊Django應用程序項目名稱,單擊publish部署

enter image description here

完成部署後,它會自動在默認瀏覽器中瀏覽您的應用程序。

1

問題是我的同事正在發佈在他的環境中使用64位版本的python。很簡單,但我很感激幫助。

相關問題