Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django AmazonS3 local環境で、static_storageをS3に設定した時の話

コードの概要

settings/local.py

...
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static_in_pro", "our_static"),
)
STATICFILES_STORAGE = 'appname.custom_storages.StaticRootS3BotoStorage'
STATIC_URL = "https://%s/%s/" % ("bucketname.s3-website-ap-northeast-1.amazonaws.com", "static")

MEDIA_URL = "https://%s/%s/" % ("bucketname.s3-website-ap-northeast-1.amazonaws.com", "media")
DEFAULT_FILE_STORAGE = 'appname.custom_storages.MediaRootS3BotoStorage'
...

AWS_STORAGE_BUCKET_NAME = 'bucketname'

# これをTrueにしたほうがファイル変更のチェックが速くなる
AWS_PRELOAD_METADATA = True

AWS_ACCESS_KEY_ID = '****************'
AWS_SECRET_ACCESS_KEY = '******************'
AWS_S3_HOST = 's3-ap-northeast-1.amazonaws.com'

custom_storages.py

from storages.backends.s3boto import S3BotoStorage

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage  = lambda: S3BotoStorage(location='media')

ポイント

  • S3の、bucketnameにはピリオドを使わない。NG例-> foo.var.com とかはダメ。OK例->foovarcomとか。
  • AWS_S3_HOST を指定する。(指定しないとcollectstaticの時に、boken pipeというerrorが出てしまう。)ホストのアドレスは、以下を参照。

docs.aws.amazon.com