簡體   English   中英

嘗試使用AWS S3BotoStorage時出現“ SECRET_KEY設置不得為空”錯誤

[英]Getting a “The SECRET_KEY setting must not be empty” error when I try to use AWS S3BotoStorage

我正在嘗試按照本教程使用AWS S3存儲桶存儲媒體和靜態文件: https : //www.caktusgroup.com/blog/2014/11/10/Using-Amazon-S3-to-store-your -Django站點靜態和媒體,文件/

在提到我的問題之前,我要指出,我認為問題是由於“循環導入”問題所致 ,如下所述: Django:不正確配置:SECRET_KEY設置不能為空,但我似乎無法准確找出如何解決。

這是我的settings.py

import os
from ebdjango.custom_storages import *

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

SECRET_KEY = 'secretkey%4!'

DEBUG = True

ALLOWED_HOSTS = []

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'ebdjangoapp',
    'storages',
)

AWS_HEADERS = {  # see http://developer.yahoo.com/performance/rules.html#expires
        'Expires': 'Thu, 31 Dec 2099 20:00:00 GMT',
        'Cache-Control': 'max-age=94608000',
    }

AWS_STORAGE_BUCKET_NAME = 'bucketname'
AWS_ACCESS_KEY_ID = 'SECRETKEYID'
AWS_SECRET_ACCESS_KEY = 'SECRETACCESSKEY'

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

STATICFILES_LOCATION = 'static'

STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION)

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'

MEDIAFILES_LOCATION = 'media'
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION)
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'



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',
    'django.middleware.security.SecurityMiddleware',
)

ROOT_URLCONF = 'ebdjango.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'ebdjango.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ['RDS_DB_NAME'],
        'USER': os.environ['RDS_USERNAME'],
        'PASSWORD': os.environ['RDS_PASSWORD'],
        'HOST': os.environ['RDS_HOSTNAME'],
        'PORT': os.environ['RDS_PORT'],
    }
}

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

我認為問題是由於以下幾行:

from ebdjango.custom_storages import *
STATICFILES_STORAGE = 'custom_storages.StaticStorage'
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'

ebdjango.custome_storages是這樣的:

from django.conf import settings
from storages.backends.s3boto import S3BotoStorage

class StaticStorage(S3BotoStorage):
    location = settings.STATICFILES_LOCATION

class MediaStorage(S3BotoStorage):
        location = settings.MEDIAFILES_LOCATION

這是我得到的錯誤:

File "/ebdjango/ebdjango/settings.py", line 15, in <module>
    from ebdjango.custom_storages import *
  File "/ebdjango/ebdjango/custom_storages.py", line 3, in <module>
    from storages.backends.s3boto import S3BotoStorage
  File "/.virtualenvs/CMS/lib/python3.4/site-packages/storages/backends/s3boto.py", line 69, in <module>
    class S3BotoStorageFile(File):
  File "/.virtualenvs/CMS/lib/python3.4/site-packages/storages/backends/s3boto.py", line 89, in S3BotoStorageFile
    buffer_size = setting('AWS_S3_FILE_BUFFER_SIZE', 5242880)
  File "/.virtualenvs/CMS/lib/python3.4/site-packages/storages/utils.py", line 22, in setting
    return getattr(settings, name, default)
  File "/.virtualenvs/CMS/lib/python3.4/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/.virtualenvs/CMS/lib/python3.4/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/.virtualenvs/CMS/lib/python3.4/site-packages/django/conf/__init__.py", line 113, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

任何想法如何解決此問題?

正如@frakelinsijo所說,將SECRET_KEY移到import語句上方是有效的。

但是,我使用的解決方案不是from ebdjango.custom_storages import * ,然后將其稱為STATICFILES_STORAGE = 'custom_storages.StaticStorage' ,所以我決定完全不使用import語句,而STATICFILES_STORAGE = 'ebdjangoapp.custom_storages.StaticStorage'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM