我有一个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)
正如我所说,静态文件和非文档似乎显得很好。
答案 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)