簡體   English   中英

aws/credentials 設置和 boto.exception

[英]aws/credentials setup and boto.exception

heroku 不提供來自aws s3 存儲桶的圖像我使用 django 作為后端我已經遷移了我的應用程序。 heroku 是自動提供我電腦上的所有圖像(就像在本地開發中它提供的那樣)還是我們必須再次上傳所有圖像?

 heroku run python manage.py migrate

我得到這個錯誤任何想法

boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request

我的 setting.py 文件是:

 """ Django settings for ecommerce project. Generated by 'django-admin startproject' using Django 1.11. For more information on this file, see https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ import os # from ecommerce.settings.aws.conf import * # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # EMAIL_HOST = 'smtp.gmail.com' # EMAIL_HOST_USER = 'abc@gmail.com' # EMAIL_HOST_PASSWORD = 'abc123' # EMAIL_PORT = 587 # EMAIL_USE_TLS = True # DEFAULT_FROM_EMAIL = "rahul <abc@gmail.com>" # # ADMINS = [('rahul', EMAIL_HOST_USER)] # MANAGERS = ADMINS # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '$$!#%(2lqx#ckmc9#j6lw5ts4_9n$qjy$@=zv09wxvo_=qa=po' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOWED_HOSTS = ["shoppingwave.herokuapp.com"] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'products', 'storages', 'boto', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'ecommerce.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], '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 = 'ecommerce.wsgi.application' # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'online_shopping', 'USER': 'postgres', 'PASSWORD': 'Rahul6612x', 'HOST': '', 'PORT': '' } } import dj_database_url db_from_env = dj_database_url.config() DATABASES['default'].update(db_from_env) # Password validation # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID", "") AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY", "") AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME", "") AWS_QUERYSTRING_AUTH = False AWS_S3_CUSTOM_DOMAIN = os.environ.get("AWS_S3_CUSTOM_DOMAIN", "") MEDIA_ROOT = os.environ.get("MEDIA_URL", "") MEDIA_URL = '/media/' # MEDIA_URL = '/media/' # STATIC_URL = '/static/' # # # # STATICFILES_DIRS = ( # os.path.join(BASE_DIR, 'static-storage'), # ) # # STATIC_ROOT = os.path.join(BASE_DIR, 'live-static-files', "static-root") # MEDIA_ROOT = os.path.join(BASE_DIR, 'live-static-files', "media-root") # # # # # STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static-serve', 'static_root') # # MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static-serve', 'media_root') # # STATICFILES_FINDERS = ( # 'django.contrib.staticfiles.finders.FileSystemFinder', # 'django.contrib.staticfiles.finders.AppDirectoriesFinder', # # ) # DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' # AWS_STORAGE_BUCKET_NAME = 'darkmachine' # AWS_ACCESS_KEY_ID = 'A55' # AWS_SECRET_ACCESS_KEY = '64E2hWFqCk' # S3_URL = 'http://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME # MEDIA_URL = S3_URL + '/media/' # # STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage' # STATIC_URL = S3_URL + '/static/'

您需要轉到Heroku 儀表板設置

然后只需輸入所有環境變量,如AWS_ACCESS_KEY_IDAWS_S3_CUSTOM_DOMAINAWS_SECRET_ACCESS_KEY等......

現在,在settings.py

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID", "") 
AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY", "")
AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME", "")
AWS_QUERYSTRING_AUTH = False 
AWS_S3_CUSTOM_DOMAIN = os.environ.get("AWS_S3_CUSTOM_DOMAIN", "")
MEDIA_ROOT = os.environ.get("MEDIA_URL", "")
MEDIA_URL = '/media/'

這應該可以正常工作。

您可以我寫的Heroku博客關注Amazon S3 存儲桶存儲 Django 應用程序的媒體文件以進一步了解。

暫無
暫無

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

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