STATIC_ROOT в Django на сервере

Я застрял на 2 часа в вопросе о STATIC_URL и STATIC_ROOT, когда пытаюсь запустить веб-приложение на моем сервере в webfactional.

когда я загружаю веб-страницу, все запросы работают хорошо, за исключением того факта, что любая ссылка с {{STATIC_URL}} работает или загружается.

Итак, распространенная ошибка, которая появляется на firebug:

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

Моя установка:

urls.py я ничего не делал, и про статические файлы ничего не сказано.

settings.py ОТЛАДКА = Ложь

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

views.py пример просмотра

@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 часть кода не найдена

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

ну, я следую всем пунктам: https://docs.djangoproject.com/en/1.4/howto/static-files/ и еще один: http://docs.webfaction.com/software/django/getting-started.html

Я использую правильные установленные приложения, промежуточное ПО, template_contexts.

Если я что-то упустил, помогите разобраться.

Заранее спасибо!

--редактировать

Я должен сказать, что если я просто изменю DEBUG = True, все будет работать нормально.

потому что на urls.py у меня есть этот фрагмент кода:

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

person cleliodpaula    schedule 30.08.2012    source источник


Ответы (1)


2 вещи должны происходить в производственной среде, которые не нужны в среде разработки.

Вы должны запустить manage.py collectstatic -- это соберет все статические файлы в ваш каталог STATIC_ROOT.

Вы должны обслуживать свой каталог STATIC_ROOT по адресу STATIC_URL. Как именно зависит от вашей производственной установки. Это даже не связано с джанго; все, что имеет значение, это то, что содержимое STATIC_ROOT доступно в STATIC_URL.

Допустим, вы используете Apache, вы бы назвали URL-адрес каталога.

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

Если вы используете nginx, это будет что-то вроде

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

Я только что понял, что вы используете веб-фракцию, и в этом случае вы настраиваете статическое приложение, которое буквально просто обслуживает файлы в целевых каталогах по указанному вами URL-адресу. Я пытаюсь вспомнить свой логин в веб-фракции, чтобы увидеть точную процедуру, но это не должно быть сложно понять.

Обновление: вошел в веб-фракцию; вы можете создать приложение, которое является символической ссылкой. Легкий!

Создайте приложение символической ссылки, которое обслуживает /YOUR_STATIC_URL/, и укажите ему /YOUR_STATIC_ROOT/. Сделанный!

person Yuji 'Tomita' Tomita    schedule 30.08.2012
comment
спасибо, работает идеально. только маленький вопрос, а по поводу медиафайлов? у нас нет python manage.py collectstatic для этого, верно? - person cleliodpaula; 31.08.2012
comment
Медиафайлы, как правило, больше предназначены для файлов, загруженных пользователем, поэтому их нельзя собрать во время развертывания. - person Rob Grant; 09.08.2014