服务器上的Django中的STATIC_ROOT

时间:2012-08-30 19:32:04

标签: django url deployment django-staticfiles webfaction

当我尝试在webfactional上运行我的服务器上的webapp时,我在2小时内遇到了关于STATIC_URL和STATIC_ROOT的问题。

当我加载网页时,所有请求都能正常运行,除非{{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     DEBUG = False

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}))

1 个答案:

答案 0 :(得分:11)

在开发环境中不需要的生产环境中必须发生两件事。

您必须运行manage.py collectstatic - 这会将所有静态文件收集到您的STATIC_ROOT目录中。

您必须在STATIC_ROOT网址上提供STATIC_URL目录。具体取决于您的生产设置。这甚至与django无关;重要的是STATIC_ROOT内容STATIC_URL

假设您正在使用Apache,您可以将URL替换为目录。

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

如果你使用的是nginx,那就像

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

我刚刚意识到你正在使用webfaction,在这种情况下你设置了一个静态应用程序,它只是在你定义的URL的目标目录中提供文件。我正在尝试记住我的webfaction登录以查看确切的过程,但这应该不难理解。

更新: 登录webfaction;您可以创建一个符号链接的应用程序。简单!

创建一个服务于/ YOUR_STATIC_URL /的符号链接应用程序,并将其指向/ YOUR_STATIC_ROOT /。完成!