【问题标题】:Serving static and media files from S3 wagtail从 S3 wagtail 提供静态和媒体文件
【发布时间】:2017-10-15 10:12:48
【问题描述】:

我们将开始使用 S3 来托管我们的静态和媒体文件。

有没有人有一个很好的链接来描述如何用 wagtail 做这两个?

我们正在使用 wagtail 1.9。

我不能让他们两个同时工作。

https://wagtail.io/blog/amazon-s3-for-media-files/

非常感谢任何帮助。

【问题讨论】:

  • 您想使用同一个 S3 存储桶还是 2 个不同的存储桶?当你说同时你的意思是你可以让他们在没有彼此的情况下工作?

标签: django amazon-s3 wagtail


【解决方案1】:

This blog post wagtail.io 对我帮助很大。但是你面临什么问题?你能让它对媒体文件和静态文件分别工作吗?

【讨论】:

    【解决方案2】:

    感谢两位的回复。

    我已经解决了。

    明确地说,我想在 S3 中使用同一个存储桶来为 wagtail 站点提供静态文件和媒体文件。

    我们正在使用带有 FROM python:2.7 的 docker 容器

    • 鹡鸰==1.9
    • django-storages==1.5.2
    • boto3==1.4.4

    custom_storages.py

    from django.conf import settings
    from storages.backends.s3boto3 import S3Boto3Storage
    class StaticStorage(S3Boto3Storage):
      location = settings.STATICFILES_LOCATION
    class MediaStorage(S3Boto3Storage):
      location = settings.MEDIAFILES_LOCATION
    

    设置文件

    STATICFILES_LOCATION = 'static'
    MEDIAFILES_LOCATION = 'media'
    STATICFILES_STORAGE = 'pcstudents.custom_storages.StaticStorage'
    DEFAULT_FILE_STORAGE = 'pcstudents.custom_storages.MediaStorage'
    COMPRESS_STORAGE = STATICFILES_STORAGE
    AWS_S3_OBJECT_PARAMETERS = {
      'CacheControl': 'max-age=86400',
    }
    AWS_S3_REGION_NAME = 'region'
    AWS_S3_SIGNATURE_VERSION = 's3v4'
    AWS_QUERYSTRING_AUTH = False
    AWS_STORAGE_BUCKET_NAME = 'bucketname'
    AWS_ACCESS_KEY_ID = 'secrets'
    AWS_SECRET_ACCESS_KEY = 'moresecrets'
    AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
    AWS_PRELOAD_METADATA = True
    STATIC_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN
    MEDIA_URL = "https://%s/media/" % AWS_S3_CUSTOM_DOMAIN
    COMPRESS_ROOT = ''
    STATICFILES_FINDERS = [
      'django.contrib.staticfiles.finders.FileSystemFinder',
      'django.contrib.staticfiles.finders.AppDirectoriesFinder',
      'compressor.finders.CompressorFinder',
    ]
    STATICFILES_DIRS = [
      '/code/static',
      '/usr/local/lib/python2.7/site-packages/wagtail/wagtailadmin/static/wagtailadmin',
    ]
    

    通过此设置,我最终得到了一个 S3 存储桶,其中包含两个文件夹,静态和媒体。

    我可以将静态收集到 S3 静态文件夹中,并从媒体文件夹上传和下载。

    如果有人能看到任何改进的方法,我会全力以赴,但这确实有效。

    马特

    【讨论】:

    • 这完全符合 Django 的最佳实践,所以我认为您的设置根本不需要任何改进
    • 我按照这个答案让 S3 正确地提供静态和上传的文件。然后,当尝试通过ManifestStaticFilesStorage 添加缓存破坏时,遇到了重复文件(特别是 CSS 文件)的奇怪问题。我问了一个问题并详细说明了那里的解决方案 - 希望这条评论可以为某人节省几个小时! stackoverflow.com/questions/52309821/…
    猜你喜欢
    • 2012-10-29
    • 2020-05-23
    • 2012-06-15
    • 2023-03-25
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2015-11-28
    相关资源
    最近更新 更多