Wagtail CMS 文档返回 404

Wagtail CMS documents returning 404

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

当我将文档添加到 CMS 中的页面时,文档被上传到 S3,但管理员和模板都找不到该文档,return 出现错误提示:

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

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

在 CMS 管理员的 'documents' 部分,我收到一条错误消息:"The file could not be found. Please change the source or delete the document"

我对此感到很困惑。更糟糕的是,它最终还是出现了。

可以通过 S3 url 和 CloudFront url 访问该文档,但 wagtail 使用它自己的 url。即:https://mywebsite.com/documents/20/mypdffile.pdf rather than 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

在我的 'global' urls.py 文件中我有:

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

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

正如我所说,静态文件和非文档似乎显示正常。

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

查看docs

This helper function works only in debug mode and only if the given prefix is local (e.g. /media/) and not a URL (e.g. media.example.com).

您可以通过将这些类型的开发 url 包装在 if settings.DEBUG 语句中来使其明确地成为条件。例如:

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