Wagtail CMS文件返回404

时间:2018-04-17 00:34:10

标签: django wagtail django-storage

我有一个Wagtail CMS网站(运行1.13.1)。它位于负载均衡器后面的两台服务器上,并使用S3作为由Django Storages管理的静态和媒体资产。

当我将文档添加到CMS中的页面时,文档将上载到S3,但管理员和模板都无法找到该文档并返回错误说明:

ClientError: An error occurred (404) when calling the HeadObject operation: Not Found

在模板中我使用{{ item.url }放置文档的网址(我使用item.file.url它可以正常工作,因为它使用了CDN网址。)

在'文件中' CMS管理员的部分我收到错误说:"找不到该文件。请更改来源或删除文件"

我对它感到非常困惑。更糟糕的是,它最终会出现。

可以通过S3网址和CloudFront网址访问该文档,但是wagtail使用自己的网址。即:https://mywebsite.com/documents/20/mypdffile.pdf而不是https://cloudfront.url/media/documents/mypdffile.pdf

配置文件重点包括:

STATIC_URL = 'https://cloudfront.url/static/'
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'project.custom_storages.StaticStorage'

MEDIA_URL = 'https://cloudfront.url/media/'
MEDIAFILES_LOCATION = 'media'
DEFAULT_FILE_STORAGE = 'project.custom_storages.MediaStorage'


AWS_STORAGE_BUCKET_NAME = 's3bucket.url'
AWS_S3_REGION_NAME = 'ap-southeast-2'
AWS_ACCESS_KEY_ID = 'ACCESS KEY'
AWS_SECRET_ACCESS_KEY = 'SECRET ACCESS KEY'
AWS_S3_SECURE_URLS = True
AWS_IS_GZIPPED = True

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=2592000',
}

AWS_S3_CUSTOM_DOMAIN = 'https://cloudfront.url/'
AWS_PRELOAD_METADATA = True

在我的全球'我有urls.py文件:

urlpatterns = [
    url(r'', include(wagtail_urls)),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

正如我所说,静态文件和非文档似乎显得很好。

1 个答案:

答案 0 :(得分:1)

+ static ...仅适用于开发服务器。

请参阅docs

  

此辅助函数仅在调试模式下有效,且仅在给定前缀为本地(例如/ media /)而非URL(例如media.example.com)时才有效。

如果将settings包含在settings.DEBUG语句中,则可以使这些类型的开发URL显式有条件。例如:

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)