2015-06-10 63 views
0

我嘗試Django的1.8和Apache下的mod_wsgi部署Django應用程序(蟒蛇3.4.3,Ubuntu的14.04)Django WSGI部署。無模塊名爲「_sqlite3」

我已經解決了與進口(Django WSGI deployment. cannot import name 'SimpleCookie')以前的錯誤,但我還認識一個又一個:

Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named '_sqlite3' 

這裏更大的一塊錯誤日誌:

[Wed Jun 10 18:33:44.021939 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 1448, in exec_module 
[Wed Jun 10 18:33:44.021960 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
[Wed Jun 10 18:33:44.022198 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/contrib/auth/models.py", line 41, in <module> 
[Wed Jun 10 18:33:44.022207 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  class Permission(models.Model): 
[Wed Jun 10 18:33:44.022760 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/models/base.py", line 139, in __new__ 
[Wed Jun 10 18:33:44.022770 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  new_class.add_to_class('_meta', Options(meta, **kwargs)) 
[Wed Jun 10 18:33:44.022807 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/models/base.py", line 324, in add_to_class 
[Wed Jun 10 18:33:44.022814 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  value.contribute_to_class(cls, name) 
[Wed Jun 10 18:33:44.023151 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/models/options.py", line 250, in contribute_to_class 
[Wed Jun 10 18:33:44.023161 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) 
[Wed Jun 10 18:33:44.023296 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/__init__.py", line 36, in __getattr__ 
[Wed Jun 10 18:33:44.023304 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  return getattr(connections[DEFAULT_DB_ALIAS], item) 
[Wed Jun 10 18:33:44.023514 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/utils.py", line 240, in __getitem__ 
[Wed Jun 10 18:33:44.023558 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  backend = load_backend(db['ENGINE']) 
[Wed Jun 10 18:33:44.023603 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/utils.py", line 111, in load_backend 
[Wed Jun 10 18:33:44.023610 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  return import_module('%s.base' % backend_name) 
[Wed Jun 10 18:33:44.023642 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/usr/local/lib/python3.4/importlib/__init__.py", line 109, in import_module 
[Wed Jun 10 18:33:44.023649 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  return _bootstrap._gcd_import(name[level:], package, level) 
[Wed Jun 10 18:33:44.023669 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 2231, in _gcd_import 
[Wed Jun 10 18:33:44.023690 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
[Wed Jun 10 18:33:44.023711 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
[Wed Jun 10 18:33:44.023732 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked 
[Wed Jun 10 18:33:44.023752 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 1129, in _exec 
[Wed Jun 10 18:33:44.023773 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 1448, in exec_module 
[Wed Jun 10 18:33:44.023793 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
[Wed Jun 10 18:33:44.023826 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] File "/var/www/.virtualenvs/cp/lib/python3.4/site-packages/django/db/backends/sqlite3/base.py", line 36, in <module> 
[Wed Jun 10 18:33:44.023833 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780]  raise ImproperlyConfigured("Error loading either pysqlite2 or sqlite3 modules (tried in that order): %s" % exc) 
[Wed Jun 10 18:33:44.023862 2015] [:error] [pid 19282:tid 140071189554944] [client 192.168.1.1:16780] django.core.exceptions.ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named '_sqlite3' 

當運行沒有出現任何錯誤開發服務器。在Python解釋器中的virtualenv CP運行時沒有錯誤,以及

>>>import sqlite3 

我wsgi.py文件是:

import os, sys, site 

sys.path.insert(0,'/var/www/.virtualenvs/cp/lib/python3.4/site-packages') 
sys.path.insert(0,'/var/www/django_projects/cp') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' 

exec(open("/var/www/.virtualenvs/cp/bin/activate_this.py").read()) 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

這裏是Apache的虛擬主機對網站的conf:

<VirtualHost *:80> 
    ServerName cp.mysite.com 
    WSGIDaemonProcess cp user=www-data group=www-data threads=5 
    WSGIApplicationGroup cp 
    WSGIScriptAlias//var/www/django_projects/cp/mysite/wsgi.py 

    <Directory /var/www/django_projects/cp/mysite> 
     <Files wsgi.py> 
      Require all granted 
     </Files> 
    </Directory> 

    ErrorLog /var/www/errlogs/cperror.log 
</VirtualHost> 
+0

您正在以不是最好的方式進行操作。在sys.path中插入一些東西是一個反模式。所以用'exec()'執行腳本。你可以創建一個腳本('bash'或其他)來準備你的環境,以便服務器啓動。激活你'Venv'並在該文件中設置模塊設置。如果你願意,我可以提供一個例子。 – sobolevn

+0

我會很感激。我正在使用我在其他示例中看到的內容,對於我來說這個特定的站點無法運行是非常奇怪的。 – Leo

+0

我已經爲你做了一個要點。請注意,我不是'bash'專家。 https://gist.github.com/sobolevn/c99122979654522d4dca – sobolevn

回答

0

最後,在使用簡單的wsgi.py(感謝@GrahamDumpleton的link)進行調試後,我發現我的結果sys.path不是太乾淨。

所以我手動wsgi.py蟒蛇把它改變的sys.path中的virtualenv CP開始,然後在wsgi.py開始時添加的項目目錄到此列表:

import os, sys 

virtual_env = '/var/www/.virtualenvs/cp'  
sys.path=['%s/lib/python34.zip' % (virtual_env,), 
      '%s/lib/python3.4' % (virtual_env,), 
      '%s/lib/python3.4/plat-linux' % (virtual_env,), 
      '%s/lib/python3.4/lib-dynload' % (virtual_env,), 
      '%s/lib/python3.4/site-packages' % (virtual_env,), 
      #'/var/www/python/3.4.3/lib/python3.4', 

      ] 
sys.path.insert(0,'/var/www/django_projects/cp') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

可能這是不是「最佳實踐」解決方案,但它確實刪除了魔術功能,並且易於理解,併爲像我這樣的新用戶重複使用。)

相關問題