【问题标题】:STATIC_ROOT in Django on Server服务器上 Django 中的 STATIC_ROOT
【发布时间】:2012-08-25 14:38:21
【问题描述】:

当我尝试在 webfacional 的服务器上运行 webapp 时,我遇到了一个关于 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 调试 = 假

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

【问题讨论】:

    标签: django url deployment django-staticfiles webfaction


    【解决方案1】:

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

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

    您必须在 STATIC_URL 网址提供您的 STATIC_ROOT 目录。具体如何取决于您的生产设置。这甚至与 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 登录以查看确切的过程,但这应该不难弄清楚。

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

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

    【讨论】:

    • 谢谢,完美。只是一个小问题,关于媒体文件?我们没有一个 python manage.py collectstatic ,对吧?
    • 媒体文件一般多为用户上传的文件,所以部署时无法采集。
    猜你喜欢
    • 2023-02-03
    • 2018-03-05
    • 2016-02-24
    • 2018-08-12
    • 2012-06-03
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多