Heroku静态文件不适用于django admin +文件未找到+ 404

时间:2016-10-10 12:52:49

标签: django heroku django-admin

我的网站部署在Heroku上。除静态文件外,一切都很顺利。 静态文件位于此路径 00000001 ====> binary representation of 1 00100000 ====> binary representation of 32.

在本地,django的管理面板工作正常。但是在heroku上,它没有找到任何静态文件。

当我用终端运行此命令时,令人惊讶。

doctor_app/doctor_app/static/

输出heroku run cat doctor_app/static/admin/css/base.css 的内容。这意味着静态文件存在

我想知道为什么django没有找到任何文件?

有关详细信息,请参阅此处base.css

settings.py

2 个答案:

答案 0 :(得分:3)

这不是Django错误。 Django做的是准备好静态文件并将它们收集到STATIC_ROOT中,这就是你的情况所设置的。

请注意,为Django项目提供静态文件通常不在其职责范围内。您可以参考Django's doc on deploying static files并尝试使用uwsginginx等应用部署它们。

快速尝试,您可以将静态文件附加到Django的路由中,如here所述:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

就您的问题而言,这可能对您有用。

答案 1 :(得分:0)

Django不支持在生产环境中提供静态文件。但是,出色的WhiteNoise项目可以集成到您的Django应用程序中,并且正是出于这个目的而设计的。

有关更多详细信息,请参见WhiteNoise文档。

安装Whitenoise

首先,使用pip安装WhiteNoise:

pip install whitenoise

请确保也将白噪声添加到您的requirements.txt文件中。

接下来,将WhiteNoise安装到Django应用程序中。这是在settings.py的中间件部分(位于顶部)完成的:

settings.py

MIDDLEWARE_CLASSES = (
    # Simplified static file serving.
    # https://warehouse.python.org/project/whitenoise/
    'whitenoise.middleware.WhiteNoiseMiddleware',
...

最后,如果您希望启用gzip功能,请将以下设置添加到settings.py。

settings.py

简化的静态文件投放。

https://warehouse.python.org/project/whitenoise/

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

您的应用程序现在将直接在生产中从Gunicorn提供静态资产。对于大多数应用程序来说,这将是完全足够的,但是顶级应用程序可能希望使用带有Django-Storages的CDN进行探索。

构建期间的静态 当将Django应用程序部署到Heroku时,$ python manage.py collectstatic --noinput将在构建过程中自动运行。如果collectstatic步骤不成功,构建将失败。

调试 如果在构建过程中collectstatic失败,则提供回溯,这将有助于诊断问题。如果您需要有关运行收集静态环境的其他信息,请使用DEBUG_COLLECTSTATIC配置。

heroku config:set DEBUG_COLLECTSTATIC=1

这将在构建输出中显示执行collectstatic命令时Python可用的所有环境变量。

禁用Collectstatic 有时,您可能不希望Heroku代表您运行collectstatic。您可以使用DISABLE_COLLECTSTATIC配置禁用collectstatic构建步骤:

heroku config:set DISABLE_COLLECTSTATIC=1

这将完全禁用构建的静态步骤。