python - 在生产 Django-Heroku 中找不到媒体文件:返回 404 错误
问题描述
我在 Djang 的媒体文件夹中有一些默认图像。但是,在我的网站上,我看不到正在显示的图像,并且出现 404 错误。
现在我的项目文件夹树是(项目名称是注册):
register
-- live-static
---- static-root
---- media-root
------ defaults
我的媒体和静态文件设置是:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'live-static', 'static-root')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'live-static', 'media-root')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
在我urls.py
的同一个文件夹中wsgi.py
:
urlpatterns = [
"""
My other urls
"""
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT ) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
我的静态文件已加载,服务器可以检索它们,但是,我添加到我的文件夹中的图像media-root
由服务器返回 404 错误。为什么会发生这种情况,因为我也已经设置STATICFILES_STORAGE
了?
解决方案
这是我第一次部署 Heroku 时就挂断的事情。由于 Heroku 项目在 dynos 上运行,如果在一定时间内没有请求,它们最终会进入休眠状态。当测功机重新启动时,它不会保存上传的数据。这是 Heroku 的一些信息的链接:https ://help.heroku.com/K1PPS2WM/why-are-my-file-uploads-missing-deleted
我最终做的是设置一个 Amazon S3 存储桶来存储这些文件。Dennis Ivy 做了一个视频来解释如何做到这一点:https ://youtu.be/inQyZ7zFMHM
推荐阅读
- javascript - vis.js - 如何运行 getSeed() 方法
- python - 从IP地址将视频流写入文件?
- java - 用户身份验证和授权在起作用
- r - 使用 rle() 索引 data.frame - 如何在函数中显示零以保持相同的向量长度?
- soap - 没有正文元素的 WSDL 响应
- bash - 从命令获取详细输出
- c++ - 用“gcc -c”编译一个 C++ 程序顺利通过。为什么?
- javascript - Can't pass var (which is a function) as argument in another function
- r - 总结后变异 - dplyr
- c# - 强制主线程在 RunWorkerCompletedEventArgs 上使用 Return