2012-08-30 10 views
7

Ich bin 2 Stunden stecken in einem Problem über STATIC_URL und STATIC_ROOT, wenn ich versuche, die Webapp auf meinem Server bei Webfactional laufen zu lassen.STATIC_ROOT in Django auf Server

Wenn ich die Webseite lade, funktionieren alle Anfragen gut, außer dass irgendeine Verbindung mit {{STATIC_URL}} funktioniert oder geladen wird.

So ein häufiger Fehler, die auf firebug erscheint, ist:

GET http://mydomain/static/extras/h5bp/js/libs/modernizr-2.5.3.min.js 500 (Internal Server Error) 

Mein Setup ist:

urls.py Ich habe nichts getan, und es gibt nichts über statische Dateien.

settings.py DEBUG = False

STATIC_ROOT = '/home/mydomain/webapps/static_app/' 
STATIC_URL = 'http://mydomain/static/' 
STATICFILES_DIRS =() 

views.py Ansicht Beispiel

@csrf_exempt 
def IndexView(request): 
    try: 
     request.user.is_authenticated() 
    except AttributeError: 
     return render_to_response('index.html', 
           {'request': request,}, 
           context_instance=RequestContext(request)) 

    return render_to_response('index.html', 
        {'request': request, 'profile' : request.user}, 
        context_instance=RequestContext(request)) 

index.html ein Teil des Codes nicht gefunden

<script src="{{ STATIC_URL }}extras/h5bp/js/libs/modernizr-2.5.3.min.js"></script> 

gut, Ich folge allen Punkten: https://docs.djangoproject.com/en/1.4/howto/static-files/ und dies ist ein andere: http://docs.webfaction.com/software/django/getting-started.html

ich den richtigen installierten Anwendungen, Middleware verwenden, template_contexts.

Wenn mir etwas fehlt, bitte hilf mir herauszufinden.

Vielen Dank im Voraus!

--edit

ich zu sagen habe, wenn ich die DEBUG nur ändern = True Willen funktioniert gut.

weil auf urls.py Ich habe dieses Stück Code:

if settings.DEBUG: 
    # static files (images, css, javascript, etc.) 
    urlpatterns += patterns('', 
     (r'^media/(?P<path>.*)/$', 'django.views.static.serve', { 
     'document_root': settings.MEDIA_ROOT})) 

Antwort

11

2 Dinge auf einer Produktions environent passieren müssen, die nicht in der Entwicklungsumgebung benötigt wird.

Sie müssen manage.py collectstatic ausführen - das sammelt alle statischen Dateien in Ihrem Verzeichnis STATIC_ROOT.

Sie müssen Ihr STATIC_ROOT-Verzeichnis unter der STATIC_URL-URL bereitstellen. Wie genau hängt von Ihrem Produktionsaufbau ab. Dies ist nicht einmal Django verwandt; Alles, was zählt, ist, dass STATIC_ROOT Inhalt bei STATIC_URL verfügbar ist.

Angenommen, Sie verwenden Apache, würden Sie eine URL in ein Verzeichnis übernehmen.

Alias /static/ /path/to/my/static_root/ 

Wenn Sie nginx verwenden, wäre es so etwas wie

location = /static/ { 
    alias /path/to/my/static_root/; 
} 

ich einfach realisiert verwenden Webfaction, in dem Fall, dass Sie eine statische Anwendung einrichten, die buchstäblich dient nur Dateien an die Zielverzeichnisse an der URL, die Sie definieren. Ich versuche, mich an mein Anmeldeformular für webfaction zu erinnern, um die genaue Vorgehensweise zu sehen, aber es sollte nicht schwierig sein, das herauszufinden.

Aktualisierung: An Webfaction angemeldet; Sie können eine Anwendung erstellen, die ein Symlink ist. Einfach!

Erstellen Sie eine symbolische Link-App, die/YOUR_STATIC_URL/bereitstellt und verweisen Sie auf/YOUR_STATIC_ROOT /. Erledigt!

+0

danke, funktioniert perfekt. nur eine kleine Frage, und über die Mediendateien? wir haben keine python manage.py collectstatic dafür, oder? – cleliodpaula

+0

Mediendateien sind im Allgemeinen mehr für vom Benutzer hochgeladene Dateien und können daher nicht zur Bereitstellungszeit gesammelt werden. –