简体   繁体   English

aws/credentials 设置和 boto.exception

[英]aws/credentials setup and boto.exception

heroku does not serving the images from the aws s3 bucket i am using django as backend i already migrate my app. heroku 不提供来自aws s3 存储桶的图像我使用 django 作为后端我已经迁移了我的应用程序。 is heroku automatic serve all images from my pc(like in local development it serve's) or we have to again upload all the images ? heroku 是自动提供我电脑上的所有图像(就像在本地开发中它提供的那样)还是我们必须再次上传所有图像?

 heroku run python manage.py migrate

and i am getting this error any idea我得到这个错误任何想法

boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request

my setting.py file is:我的 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/'

You need to go to Heroku dashboard settings .您需要转到Heroku 仪表板设置

Then just enter all your environment variables like AWS_ACCESS_KEY_ID , AWS_S3_CUSTOM_DOMAIN , AWS_SECRET_ACCESS_KEY and etc....然后只需输入所有环境变量,如AWS_ACCESS_KEY_IDAWS_S3_CUSTOM_DOMAINAWS_SECRET_ACCESS_KEY等......

Now, in settings.py现在,在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/'

This should work fine then.这应该可以正常工作。

You can follow Amazon S3 bucket for storing media files of Django app on Heroku blog written by me for further understanding.您可以我写的Heroku博客关注Amazon S3 存储桶存储 Django 应用程序的媒体文件以进一步了解。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM