我的网站部署在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
答案 0 :(得分:3)
这不是Django错误。 Django做的是准备好静态文件并将它们收集到STATIC_ROOT
中,这就是你的情况所设置的。
请注意,为Django项目提供静态文件通常不在其职责范围内。您可以参考Django's doc on deploying static files并尝试使用uwsgi
或nginx
等应用部署它们。
快速尝试,您可以将静态文件附加到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
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
这将完全禁用构建的静态步骤。