我想在AWS EC2上部署Django项目。对于我的媒体文件,我需要S3上的存储桶。我的项目在localhost上运行良好,并且可以从S3访问媒体,但是在部署后我无法获得AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,这就是为什么我会收到Server Error 500的原因。
这是 settings.py
DEBUG = False
ALLOWED_HOSTS = ['XXXXXXXX']
INSTALLED_APPS = [
'apps.comic',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'storages',
]
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'apps/comic/static/media')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
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_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
我试图制作〜/ .aws / credentials:
[default]
aws_access_key_id = X...X
aws_secret_access_key = X...X
但是与Server Error 500的结果相同。由于没有任何媒体文件,所以我只能获得登录/注册页面。
生产后如何获取媒体文件该怎么办?我是否需要对凭据或settings.py文件进行一些更改?
答案 0 :(得分:0)
您的问题是由于以下三行:
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')
具体来说,这部分os.environ.get
基本上指示您的python脚本在操作系统变量中搜索AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
。
要解决此问题,您有两种选择:
export AWS_KEY=Your_Key
上运行,将AWS变量添加到EC2环境变量中
OR
将您的ID和密钥直接写入您的settings.py
文件
AWS_ACCESS_KEY_ID = "key_string_here"
AWS_SECRET_ACCESS_KEY = "secret_string_here"
AWS_STORAGE_BUCKET_NAME = "bucket_name_here"
我希望第二个选项更便携。