2012-08-30 21 views
7

Tengo 2 horas atrapadas en un problema sobre STATIC_URL y STATIC_ROOT cuando trato de ejecutar la aplicación web en mi servidor en webfactional.STATIC_ROOT en Django en el servidor

cuando cargo la página web todas las solicitudes funcionan bien, excepto por el hecho de que cualquier enlace con {{STATIC_URL}} está trabajando o cargando.

Así que un error común que aparece en Firebug es:

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

Mi configuración es:

urls.py me hizo nada, y no hay nada acerca de los archivos estáticos.

settings.py DEBUG = False

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

views.py vista ejemplo

@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 de código no encontrado

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

bien, Sigo todos los puntos de: https://docs.djangoproject.com/en/1.4/howto/static-files/ y esto otro: http://docs.webfaction.com/software/django/getting-started.html

estoy usando las correctas instaladas aplicaciones, middleware, template_contexts.

Si me falta algo, ayúdame a descubrirlo.

¡Gracias de antemano!

--edit

Tengo que decir que, si acabo de cambiar el debug = true voluntad funciona bien.

porque en urls.py tengo este pedazo de código:

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

Respuesta

11

2 cosas deben suceder en un environent producción que no se necesita en el entorno de desarrollo.

Debe ejecutar manage.py collectstatic - esto recopila todos los archivos estáticos en su directorio STATIC_ROOT.

Debe publicar su directorio STATIC_ROOT en la url STATIC_URL. Cómo exactamente depende de su configuración de producción. Esto ni siquiera está relacionado con django; todo lo que importa es que el contenido STATIC_ROOT está disponible en STATIC_URL.

Digamos que está utilizando Apache, alias una URL a un directorio.

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

Si está utilizando nginx, sería algo así como

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

simplemente me di cuenta de que está utilizando webfaction, en cuyo caso se configura una aplicación estática, que, literalmente, sólo sirve a los archivos los directorios de destino en la URL que define. Intento recordar el inicio de sesión de mi webfaction para ver el procedimiento exacto, pero no debería ser difícil de entender.

Actualización: Conectado a webfaction; puedes crear una aplicación que sea un enlace simbólico. ¡Fácil!

Crea una aplicación de enlace simbólico que sirva/YOUR_STATIC_URL/y apúntala a/YOUR_STATIC_ROOT /. ¡Hecho!

+0

gracias, funciona perfecto. solo una pequeña pregunta, y sobre los archivos multimedia? no tenemos un python manage.py collectstatic para esto, ¿verdad? – cleliodpaula

+0

Los archivos multimedia generalmente son más para los archivos subidos por el usuario, por lo que no se pueden recopilar en el momento de la implementación. –

Cuestiones relacionadas