【问题标题】:Setting Django to serve media files from Amazon S3设置 Django 以提供来自 Amazon S3 的媒体文件
【发布时间】:2013-11-23 18:31:39
【问题描述】:

我正在尝试在 Heroku 中部署我的项目,但媒体文件(图像)在一段时间后被删除,所以有人告诉我我需要使用名为“Amazon S3”的服务,我的问题是,如何配置我的项目使用该服务。有人可以帮帮我吗?

【问题讨论】:

    标签: python django heroku amazon-s3


    【解决方案1】:

    您可以按照本文中的步骤进行操作:

    http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/

    但是可以做一个小教程:

    第 1 步 - 安装 boto 和 django-storages:

    $ pip install boto django-storages
    

    将 django-storages 添加到 INSTALLED_APPS:

    INSTALLED_APPS += ('storages',)
    

    第 2 步 - 创建您的 S3 存储桶:

    转到https://console.aws.amazon.com/s3/home 并创建它。

    第 3 步 - 获取您的凭据:

    转到https://console.aws.amazon.com/iam/home?#security_credential,点击“访问密钥”并创建它。

    第 4 步 - 将您的凭据添加到 django 设置:

    首先,在项目文件夹中创建一个名为s3utils.py的文件,内容如下:

    from storages.backends.s3boto import S3BotoStorage                                            
    StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')              
    MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media') 
    

    我更喜欢使用所有这些配置作为环境变量,所以我建议你这样做:

    $ heroku config:set AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY S3_BUCKET_NAME=YOUR_BUCKET_NAME
    

    然后,将其放入您的设置中:

    AWS_STORAGE_BUCKET_NAME = os.environ['S3_BUCKET_NAME']                          
    MEDIA_ROOT = '/media/'                                                          
    S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME                
    MEDIA_URL = S3_URL + MEDIA_ROOT                                                 
    DEFAULT_FILE_STORAGE = 'YOUR_PROJECT.s3utils.MediaRootS3BotoStorage'                 
    STATICFILES_STORAGE = 'YOUR_PROJECT.s3utils.StaticRootS3BotoStorage'                 
    AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']                             
    AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']  
    

    第 5 步 - 再次运行 collectstatic

    您需要再次收集静态文件,以便将其放入亚马逊。

    heroku run python manage.py collectstatic
    

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      先看看这个 http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html

      基本上,您不需要 Django 在这里提供任何服务,而是需要确保静态引用指向另一个域(S3 域)而不是 Heroku 域。

      【讨论】:

      • 为了解决更大的问题,不确定 Heroku 中的媒体文件是否一定会被删除,也不确定 Amazon S3 是否是该问题的唯一解决方案。
      • 但我要存储的是媒体文件、图像、模型中的文件。
      • 我刚刚看到我必须使用信用卡,而我没有。我还有其他选择来存储我的媒体文件吗?
      • 模型中的文件到底是什么意思?
      • @Nicolas78 还有什么其他解决方案?
      猜你喜欢
      • 2020-05-23
      • 2012-10-29
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2017-05-16
      • 2012-09-30
      • 2010-09-29
      相关资源
      最近更新 更多