Не удается собрать статические данные в s3 в django с помощью boto — ведро s3 возвращает NoneType

Когда я хочу собрать статику на S3, он выдает TypeError

мои настройки.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
SECRET_KEY = 'something'
#DEBUG = False
DEBUG = True
PER_PAGE    = 12

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = ['xyz.com']
# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    .....,
    .......,
)
if DEBUG:

    INSTALLED_APPS = INSTALLED_APPS + ('storages',)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
)


ROOT_URLCONF = 'myproject.urls'

if DEBUG:
    WSGI_APPLICATION = 'myproject.wsgi_production.application'
else:    
   WSGI_APPLICATION = 'myproject.wsgi.application'

from  . import s3_custom
# Internationalization
# https://docs.djangoproject.com/en/1.7/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

AWS_STORAGE_BUCKET_NAME = 'bucket name'
AWS_ACCESS_KEY_ID = 'key'
AWS_SECRET_ACCESS_KEY = 'access key'
AWS_S3_CUSTOM_DOMAIN ='https://bucketname.s3.amazonaws.com'

if DEBUG:
    STATICFILES_DIRS = ((os.path.join(BASE_DIR,'mystatic')),)
    #STATIC_ROOT = os.path.join(BASE_DIR,'static')
    #STATIC_URL = '/static/'
    #MEDIA_ROOT = (os.path.join(BASE_DIR,'media'))
    #MEDIA_URL = AWS_S3_CUSTOM_DOMAIN+'/media/'
    TEMPLATE_DIRS = (os.path.join(BASE_DIR,'templates'),)

    STATICFILES_LOCATION = 'static'
    STATICFILES_STORAGE = 'myproject.s3_custom.StaticStorage'
    STATIC_URL = AWS_S3_CUSTOM_DOMAIN+'/'+STATICFILES_LOCATION+'/'

    MEDIAFILES_LOCATION = 'media'
    MEDIA_URL = AWS_S3_CUSTOM_DOMAIN+'/'+MEDIAFILES_LOCATION+'/'
    DEFAULT_FILE_STORAGE = 'myproject.s3_custom.MediaStorage'

    #DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    #STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

    # databases

    ....
    .......

s3_custom.py

from storages.backends.s3boto import S3BotoStorage
import os
AWS_STORAGE_BUCKET_NAME = 'bucket name'
AWS_ACCESS_KEY_ID = 'key'
AWS_SECRET_ACCESS_KEY = 'access key'
AWS_S3_CUSTOM_DOMAIN ='https://bucketname.s3.amazonaws.com'

class StaticStorage(S3BotoStorage):
    location = 'static'

class MediaStorage(S3BotoStorage):
    location = 'media'

когда я запускаю это в терминале python manage.py collectstatic

Ошибка

  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 533, in handle
    return self.handle_noargs(**options)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle_noargs
    collected = self.collect()
  File "/usr/local/lib/python2.7/dist

-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 107, in collect
        handler(path, prefixed_path, storage)
      File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 305, in copy_file
        if not self.delete_file(path, prefixed_path, source_storage):
      File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 218, in delete_file
        if self.storage.exists(prefixed_path):
      File "/usr/local/lib/python2.7/dist-packages/storages/backends/s3boto.py", line 414, in exists
        return k.exists()
      File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 539, in exists
        return bool(self.bucket.lookup(self.name, headers=headers))
      File "/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py", line 142, in lookup
        return self.get_key(key_name, headers=headers)
      File "/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py", line 192, in get_key
        key, resp = self._get_key_internal(key_name, headers, query_args_l)
      File "/usr/local/lib/python2.7/dist-packages/boto/s3/bucket.py", line 199, in _get_key_internal
        query_args=query_args)
      File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 652, in make_request
        auth_path = self.calling_format.build_auth_path(bucket, key)
      File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 94, in build_auth_path
        path = '/' + bucket
    TypeError: cannot concatenate 'str' and 'NoneType' objects

Пожалуйста, помогите мне, что я делаю неправильно, я даю свои драгоценные 4 часа, но я не могу найти ошибку


person mehrab    schedule 25.04.2015    source источник
comment
Вы проверили, помогает ли этот ответ? stackoverflow.com/a/15936697/870769   -  person sthzg    schedule 25.04.2015
comment
@sthzg я уже читал это   -  person mehrab    schedule 25.04.2015
comment
Если вы войдете в оболочку с помощью python manage.py shell, а затем введете from django.conf import settings и print settings.AWS_STORAGE_BUCKET_NAME, будет ли напечатано правильное имя корзины, как указано в настройках?   -  person sthzg    schedule 25.04.2015