2012-08-30 8 views
7

Sono 2 ore bloccato in un problema su STATIC_URL e STATIC_ROOT quando provo a eseguire la webapp sul mio server su webfactional.STATIC_ROOT in Django sul server

quando carico la pagina Web tutte le richieste funzionano bene, tranne il fatto che qualsiasi link con {{STATIC_URL}} funziona o sta caricando.

Quindi un errore comune che appare sul Firebug è:

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

La mia configurazione è:

urls.py ho fatto nulla, e non c'è niente di file statici.

settings.py DEBUG = False

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

views.py guarda esempio

@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 una parte di codice non trovata

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

bene, Seguo tutti i punti di: https://docs.djangoproject.com/en/1.4/howto/static-files/ e questo un altro: http://docs.webfaction.com/software/django/getting-started.html

sto utilizzando le corrette installate applicazioni, middleware, template_contexts.

Se mi manca qualcosa per favore aiutami a capire.

Grazie in anticipo!

--edit

devo dire, se mi limito a cambiare il DEBUG = True volontà funziona bene.

perché in urls.py ho questo pezzo di codice:

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

risposta

11

2 cose devono accadere in un environent di produzione che non è necessario nell'ambiente di sviluppo.

È necessario eseguire manage.py collectstatic - questo raccoglie tutti i file statici nella directory STATIC_ROOT.

È necessario pubblicare la directory STATIC_ROOT nell'URL STATIC_URL. Quanto dipende esattamente dalla tua configurazione di produzione. Questo non è nemmeno legato al Django; tutto ciò che conta è che i contenuti di STATIC_ROOT siano disponibili allo STATIC_URL.

Supponiamo che tu stia utilizzando Apache e che tu fossi alias di un URL in una directory.

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

Se stai usando nginx, sarebbe qualcosa di simile

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

Ho appena realizzato che si sta utilizzando Webfaction, nel qual caso si configura un'applicazione statica, che letteralmente appena serve a file le directory mirate all'URL che definisci. Sto cercando di ricordare il mio login webfaction per vedere la procedura esatta, ma non dovrebbe essere difficile da capire.

Aggiornamento: Registrato in webfaction; puoi creare un'applicazione che è un link simbolico. Facile!

Creare un'app di collegamento simbolico che serve/YOUR_STATIC_URL/e puntarla su/YOUR_STATIC_ROOT /. Fatto!

+0

grazie, funziona perfettamente. solo una piccola domanda e sui file multimediali? non abbiamo un python manage.py collectstatic per questo, giusto? – cleliodpaula

+0

I file multimediali sono generalmente più per i file caricati dall'utente, quindi non possono essere raccolti al momento della distribuzione. –