Heroku 上的 Django - 损坏的管理静态文件

Posted

技术标签:

【中文标题】Heroku 上的 Django - 损坏的管理静态文件【英文标题】:Django on Heroku - Broken Admin Static Files 【发布时间】:2012-05-05 17:50:31 【问题描述】:

我有一个在 Heroku/Cedar 上运行的 Django 应用程序,按照 https://devcenter.heroku.com/articles/django 的说明进行配置

按照 Heroku 的说明使用 gunicorn 无法包含 Django 管理员运行所需的静态文件。我可以将 Procfile 更改为“manage.py run_gunicorn”以进行本地开发,但这不适用于 Heroku。

我已经到处寻找修复方法 - 是否有某种方法可以包含管理静态文件,而不会将它们与我的其他静态文件一起扔到 S3 上?

【问题讨论】:

【参考方案1】:

如果您使用 runserver 并使用 DEBUG=True 配置您的应用程序,那么它将像在您的开发机器上一样提供管理文件。但是,这绝对不是推荐的方法,我建议您将它们放在 S3 上。

使用 django-storages 应用程序很容易配置 collectstatic 以自动将所有管理文件推送到 S3。你可以找到路线here

【讨论】:

【参考方案2】:

查看这篇文章:http://matthewphiong.com/managing-django-static-files-on-heroku

如果这对您不起作用,请尝试在正常的 url 模式元组之后将以下内容添加到您的 urls.py 中。确保你已经设置了 STATIC_ROOT 并且在推送到 heroku 之前你已经在本地环境中运行了 collect static 。

urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
        'document_root': settings.STATIC_ROOT,
    ),
 )

【讨论】:

对我来说,使用 Django 1.5.1,'django.contrib.staticfiles.views' 有效,而 'django.views.static.serve' 没有。 感谢您的注意 - 我认为路径在 1.5 中发生了变化【参考方案3】:

我让 django 管理员处理以下编辑

urls.py(最后)

import settings
urlpatterns += patterns('',
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
        'document_root': settings.STATIC_ROOT,
    ),
)

过程文件

web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT

【讨论】:

【参考方案4】:

只需添加这些

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

使用 django 1.4.1

【讨论】:

也适用于版本:3.1.5。 :) 具体将其添加到包含“path('admin/', admin.site.urls)”的相同 urlpatterns 列表中。 发挥魅力【参考方案5】:

'django.contrib.staticfiles.views.serve'

而不是

'django.views.static.serve'

【讨论】:

【参考方案6】:

在“project_directory”中创建“static”文件夹。

在“settings.py”文件中设置“STATIC_ROOT”路径,该路径可以为您的管理站点的静态文件提供服务。

STATIC_ROOT = (os.path.join(os.path.dirname(__file__), '..', 'static'))

在“/urls.py”中添加 STATIC_ROOT

from django.conf import settings
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
            'document_root': settings.STATIC_ROOT,
        ),
    )

运行以下命令,将所有管理静态文件复制到项目的静态文件夹中。

python manage.py collectstatic

现在执行 git add、commit 和 push heroku master。

【讨论】:

【参考方案7】:

与要求的日期相比,似乎有点晚了。但我进入了这个问题,花了 30 分钟来解决我做错了什么。所以对于那些可能陷入这个陷阱的人来说,这是一个神奇的解决方案。

Heroku的django.contrib.staticfiles.urls有问题

解决方案

您需要在 Heroku 设置中安装 dj-static (Link to download)。 这是一个 Django 中间件实用程序,允许使用 Gunicorn 等 WSGI 服务器从生产中正确提供静态资产。

我希望这会对某人有所帮助。

【讨论】:

将它添加到设置中实际上是 Heroku 教程的一部分。我完成了这些说明,但在管理员中仍然遇到同样的问题,所以这似乎不是一个有效的解决方案。 当时它对我有用。我不知道为什么它现在不起作用。 成功了!好兄弟!【参考方案8】:

按照这个来修复所有与 Django 和 heroku 相关的静态问题。

在您的settings.py 中将其粘贴到末尾

import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
    )
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR,'templates'),
    )

STATIC_URL = '/static/'

您的特定应用模板应位于app_name/templates/app_name/

当您渲染模板时,您将指定template name

views.py

.....
return render(request,'app_name/template_name.html',context)

对于static files,请将您的文件放在这里:

project_folder/app_name/static/app_name/css

project_folder/app_name/static/app_name/js

project_folder/app_name/static/app_name/img

访问您的静态文件使用路径app_name/css/style_name.css

如果您遵循此操作,您的所有静态文件都将在 heroku 以及您的本地开发机器中正常加载。

【讨论】:

【参考方案9】:

如果您在不使用白噪声(我建议)的情况下部署到 Heroku,请务必使用 dj_static https://pypi.python.org/pypi/dj-static!

过去 3 小时我尝试将我的文件提供给 heroku,而 dj_static 在 2 分钟内就工作了。

【讨论】:

以上是关于Heroku 上的 Django - 损坏的管理静态文件的主要内容,如果未能解决你的问题,请参考以下文章

django上的管理页面已损坏

在 Heroku 上的 Django 应用中启用 CORS

RabbitMQ 上的 Heroku、Django 和 celery

Heroku 上的 Django 静态文件

Heroku 上的 webpack 和 django:collectstatic 之前的捆绑

部署在heroku上的Django网站不起作用