Amazon S3 для django в производстве

Я использую django-s3-folder-storage для хранения своих статических и мультимедийных файлов. Я выполнил все инструкции, указанные в документации, но все равно не могу обслуживать свои статические файлы. Я могу обслуживать файлы, загруженные моим пользователем, но статические файлы не отображаются на веб-сайте даже после запуска команды collectstatic, которая копирует файлы в корзину. Я не создал никаких записей CNAME в своем домене (не уверен, имеет ли это какое-то значение, поскольку я могу видеть загруженные пользователем изображения).

Мой файл настроек:

DEFAULT_FILE_STORAGE = 's3_folder_storage.s3.DefaultStorage'
DEFAULT_S3_PATH = "media"
STATICFILES_STORAGE = 's3_folder_storage.s3.StaticStorage'
STATIC_S3_PATH = "static"
AWS_ACCESS_KEY_ID = # omitted
AWS_SECRET_ACCESS_KEY = # omitted
AWS_STORAGE_BUCKET_NAME = # omitted

MEDIA_ROOT = '/%s/' % DEFAULT_S3_PATH
MEDIA_URL = '//s3.amazonaws.com/%s/media/' % AWS_STORAGE_BUCKET_NAME
STATIC_ROOT = "/%s/" % STATIC_S3_PATH
STATIC_URL = '//s3.amazonaws.com/%s/static/' % AWS_STORAGE_BUCKET_NAME
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

STATICFILES_DIRS = (
       root('static'),
)

И мой каталог проекта:

website_name
    static
    website_name
      settings.py

person Dev    schedule 01.04.2013    source источник
comment
Я использую s3fox и по какой-то причине не могу проверить, попадают ли файлы в корзину или нет после collectstatic. Я разместил здесь еще один вопрос относительно этого здесь. (stackoverflow.com/questions/15747933/ ). я также не могу получить к ним доступ по их прямому URL-адресу? Я не установил точку записи CNAME для s3.amazon.com? Нужно ли настраивать для доступа к статическим файлам?   -  person Dev    schedule 01.04.2013
comment
Попробуйте войти в S3 через веб-интерфейс Amazon и таким образом проверить содержимое корзины. Кроме того, не могли бы вы добавить к вопросу свою версию Django, настройки MEDIA_URL и STATIC_URL? (Если вы не изменили настройки _URL на новое доменное имя, то нет, ваш CNAME еще не проблема.)   -  person toxotes    schedule 01.04.2013
comment
Привет, я отредактировал свой вопрос с моими настройками. А также я могу видеть ведро, когда я вхожу в систему с помощью пользовательского интерфейса amazon, и я также вижу все свои статические файлы.   -  person Dev    schedule 01.04.2013
comment
Привет, у меня есть имя ведра, указанное в моих настройках, и оно существует и на amazon s3. Я могу обслуживать загруженные пользователем файлы. это только статические файлы, с которыми у меня проблемы. Когда я проверяю элементы в браузере, путь к статическим изображениям такой же, как я упоминал в моем edit2. Не могли бы вы сообщить мне, нужно ли мне добавлять имя корзины до запуска s3.amazonaws.com и т. д., как в моем редактировании 2?   -  person Dev    schedule 01.04.2013
comment
Привет, теперь это работает после изменения статического URL. Я также обновил свой вопрос с помощью редактирования.   -  person Dev    schedule 01.04.2013
comment
Я добавил некоторые мысли о том, почему вы можете столкнуться с этой проблемой в качестве ответа на случай, если кто-то еще столкнется с этой же проблемой. Не могли бы вы переместить любую соответствующую информацию из ваших комментариев в свой вопрос и удалить комментарии, которые больше не нужны? Вы также можете принять свой собственный ответ, чтобы показать другим, что это решение сработало для вас.   -  person toxotes    schedule 01.04.2013


Ответы (2)


Я изменил STATIC_URL, как показано ниже, и теперь он работает нормально.

STATIC_URL = '//bucketname.s3.amazonaws.com/static/'

Но MEDIA_URL упоминается в самой документации, и MEDIA_URL работает нормально. Только STATIC_URL нуждается в изменении.

Похоже, документация неверна.

person Dev    schedule 01.04.2013
comment
Я думаю, дело не в том, что документация откровенно неверна, а в том, что она просто не учитывает некоторые аспекты вашей конфигурации. - person toxotes; 02.04.2013

Как правило, S3 может использовать формат пути поддомена или подпапки. По умолчанию для django-storages, используемого этим конкретным хранилищем, используется субдомен. Так что интересно, что переход на подпапку решил проблему. В ОП упоминается использование европейского региона в другом вопросе, и я подозреваю, что основная проблема здесь связано с используемой конечной точкой или одним из параметров конфигурации S3/S3BotoStorage, влияющих на регион (например, AWS_CALLING_FORMAT).

person toxotes    schedule 01.04.2013