2016-05-13 7 views
0

Ich habe Django auf meinem lokalen Rechner ausgeführt, aber ich bin an dem Punkt, wo ich meine Django-Site auf meinem Produktionsserver bereitstellen möchte. Mein Server ist ein Ubuntu 14.04 Server mit Apache 2.x, Python 2.7 und Django 1.8. Ich habe versucht, für Apache Django Grundkonfiguration mit und mod_wsgi link, aber ich bekomme immer folgende Fehlermeldung:Django Bereitstellung für die Produktion

my site

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Hier ist der Fehler im Fehler Apache Log Ich erhalte:

mod_wsgi (pid=14962): Target WSGI script '/var/www/tmws/tmws/wsgi.py' cannot be loaded as Python module., 
mod_wsgi (pid=14962): Exception occurred processing WSGI script '/var/www/tmws/tmws/wsgi.py'., 
Traceback (most recent call last):, 
File "/var/www/tmws/tmws/wsgi.py", line 21, in <module>, 
    application = get_wsgi_application(), 
File "/usr/local/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application, 
    django.setup(), 
File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup, 
    apps.populate(settings.INSTALLED_APPS), 
File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 85, in populate, 
    app_config = AppConfig.create(entry), 
File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 86, in create, 
    module = import_module(entry), 
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module, 
    __import__(name), 
File "/var/www/tmws/django_tables2/__init__.py", line 2, in <module>, 
    from .tables import Table, 
File "/var/www/tmws/django_tables2/tables.py", line 15, in <module>, 
    from . import columns, 
File "/var/www/tmws/django_tables2/columns/__init__.py", line 1, in <module>, 
    from .base import library, BoundColumn, BoundColumns, Column, 
File "/var/www/tmws/django_tables2/columns/base.py", line 10, in <module>, 
    from django_tables2.utils import Accessor, AttributeDict, OrderBy, OrderByTuple, 
File "/var/www/tmws/django_tables2/utils.py", line 111, in <module>, 
    @six.python_2_unicode_compatible, 
AttributeError: 'module' object has no attribute 'python_2_unicode_compatible', 
Hier

ist meine apache2.conf Datei:

... 

<Directory /var/www/tmws/tmws> 
    <Files wsgi.py> 
     Require all granted 
    </Files> 
</Directory> 

... 

WSGIScriptAlias//var/www/tmws/tmws/wsgi.py 
WSGIPythonPath /var/www/tmws 

Das ist meine wsgi.py Datei:

import os, sys 

from django.core.wsgi import get_wsgi_application 

sys.path.append('/home/ubuntu/gather/src') 
sys.path.append('/usr/local/lib/python2.7/dist-packages') 
sys.path.append('/var/www/tmws') 
sys.path.append('/var/www/tmws/tmws') 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tmws.settings") 

application = get_wsgi_application() 

Dies ist meine Webseite Conf-Datei:

<VirtualHost *:80> 
    ServerAdmin xxxxxxxx 
    ServerName xxxxxxxxxxx 
    DocumentRoot /var/www/tmws 
    WSGIScriptAlias//var/www/tmws/tmws/wsgi.py 

    ErrorLog ${APACHE_LOG_DIR}/TMWSerror.log 
    CustomLog ${APACHE_LOG_DIR}/TMWSaccess.log combined 

</VirtualHost> 

Jede Hilfe wäre sehr geschätzt. Wenn es noch etwas gibt, das ich posten kann, um mir zu helfen, lass es mich wissen.

+0

Betreiben Sie Django aus einer virtuellen Umgebung? Das solltest du wahrscheinlich sein. Das Problem ist, dass Sie eine alte Version von 'six' verwenden. – solarissmoke

+0

Vielen Dank für Ihre Antwort. Nein, ich benutze keine virtuelle Umgebung, irgendwann möchte ich. Was ist sechs? – user908759

+3

'sechs' ist eine Python-Bibliothek. Es sollte funktionieren, wenn Sie es mit 'pip install --upgrade six 'aktualisieren, aber dies für die Systempython-Pakete zu tun ist nicht ideal, da Sie Konflikte mit anderen Systempaketen riskieren - daher besser, eine virtuelle Umgebung zu verwenden. – solarissmoke

Antwort

1

Ihr System verwendet wahrscheinlich eine ältere Version des Python-Pakets six, das die python_2_unicode_compatible-Methode nicht enthält. Aktualisieren von sechs auf die neueste Version sollte es beheben:

pip install --upgrade six 

Das heißt, es dringend ratsam ist Django von einer virtuellen Umgebung ausgeführt werden, anstatt Pakete auf Systemebene zu installieren - wenn es Systempakete sind, dass aus irgendeinem Grund abhängig von der älteren Version von six können Sie dann auf andere Probleme stoßen.