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)
我有一个 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)