当前位置: 首页 > 知识库问答 >
问题:

django heroku媒体文件404错误

贺景山
2023-03-14

我最近在Heroku上部署了一个Django应用程序,并上传了一些媒体文件,一切似乎都正常,直到昨天我再次尝试访问该应用程序时,才发现它出现了404错误。

你知道为什么会这样吗?

settings.py:

import os
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
import dj_database_url
#DATABASES['default'] =  dj_database_url.config()
DATABASES = {'default':  dj_database_url.config(default='postgres://localhost')}

# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

# Allow all host headers
ALLOWED_HOSTS = ['*']

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

URL。py公司

urlpatterns = patterns('',
    (r'', include(application.urls)),
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
    (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_ROOT}),

)

共有2个答案

蒋斯伯
2023-03-14

我猜你的静态文件有问题。

例如,您有

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

对于我的Heroku应用程序,我有

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

静态文件的设置似乎很少有人真正理解(包括我自己),但这篇博文提供了一个很好的解释:http://blog.doismellburning.co.uk/2012/06/25/django-and-static-files/

欧渝
2023-03-14

Heroku dynos的寿命有限,当它们死亡并被替换(自动发生)时,其中的任何文件都会丢失,包括您通过Django上传的任何文件。您要做的是设置Django的媒体处理,将文件放在更永久的位置(这也允许您同时使用多个Dyno,这就是Heroku处理水平缩放的方式)。为此,我倾向于使用Amazon S3,因此我的配置看起来有点像:

AWS_STORAGE_BUCKET_NAME = "your_bucket"
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
MEDIA_URL = "https://%s.s3.amazonaws.com/" % os.environ['AWS_STORAGE_BUCKET_NAME']
MEDIA_ROOT = ''
AWS_ACCESS_KEY_ID = "your_access_key_id"
AWS_SECRET_ACCESS_KEY = "your_secret_access_key"

这是使用django存储和boto来提供一个使用Amazon S3的django存储层。

请注意,根据您的应用程序,S3的这种“直通”访问可能不合适。在Heroku的devcenter中使用S3的一些注释可能会有所帮助。

 类似资料:
  • 我不知道发生了什么,但在浏览器控制台中,我可以看到3个与字体相关的错误 我知道这是荒谬的,我不能自己解决这个问题,但一切似乎都好,在我的index.html我有这样的东西 这就是我所有与字体相关的东西,我已经检查了路径,我没有错。 这是发生在你们中间的吗? 更新 这是NGINX部分,我在头部加载了一些内容

  • 请求方式: 使用multipart/form-data POST上传文件 请求地址: https://open.qingtui.cn/v1/media/upload?access_token=ACCESS_TOKEN&type=TYPE 请求示例(使用curl命令,用FORM表单方式上传一个多媒体文件): curl -F media=@test.jpg "https://open.qingtui.

  • 媒体组件说明 组件 说明 最低版本 备注 audio 音频 1.0.0 image 图片 1.0.0 video 视频 1.0.0 camera 照相机 2.9.3 live-player 实时音频播放 2.10.1 需配合第三方音视频 SDK 使用 live-pusher 实时音频录制 2.10.1 需配合第三方音视频 SDK 使用 voip-room 多人音视频对话 不支持 audio 属性

  • 图片。 属性名 类型 默认值 说明 src String 图片资源地址 mode String 'scaleToFill' 图片裁剪、缩放的模式 lazy-load Boolean false 图片懒加载。只针对 page 与 scroll-view 下的 image 有效 binderror HandleEvent 当错误发生时,发布到 AppService 的事件名,事件对象 event.de

  • 我现在正在读《实践中的Rest》一书。我无法理解以下术语超媒体,超媒体格式,超媒体控件,域应用协议。作者建议需要特定领域的超媒体格式。我很难理解这些。我在谷歌上搜索了这些术语,但没有找到正确的答案。谁能解释一下这些术语,以及为什么我们需要特定于领域的超媒体格式而不是应用程序/XML?

  • 问题内容: 我想爱Django,但是开发环境中的静态文件和媒体文件业务让我发疯。请把我从愚蠢中解救出来。 我在开发机器上。我的项目目录的根目录中有文件夹。 在settings.py我有:和。 在我有: 但是我获取媒体文件的唯一方法是通过引用/media/media/例如 。 我期望(并且想要) 谁能告诉我这里发生了什么,并给我一个设置媒体文件处理的简单方法吗? 非常感谢你。 但这留下了两个问题: