我已经跟进了亚马逊提供的“将Django应用程序部署到AWS Elastic Beanstalk ”教程,但我尝试在本地运行该项目,并且我收到 KeyValue错误我一直无法找到解决方案。
运行命令时:
$ ./manage.py help
我收到此错误:
File "/Users/dave/Sites/djangodev/djangodev/settings.py", line 17, in <module>
'NAME': os.environ['RDS_DB_NAME'],
File "/Users/dave/.virtualenvs/djangodev/bin/../lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'RDS_DB_NAME'`
我实际上是在尝试运行$ ./manage.py runserver
但是返回一个runserver不存在错误。这是因为我的settings.py文件中存在错误。
settings.py :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'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'],
}
}
这在AWS上运行得很好。当地不是。我并不感到惊讶,因为RDS_DB_NAME不在我的本地os.environ字典中。
还有另一个stackoverflow问题尚未提供解决方案。 Elastic Beanstalk not creating RDS Parameters
我让它在AWS上运行,它只是让一个本地实例运行起来很困难。
答案 0 :(得分:0)
花了很多时间,但我找到了解决方案。您需要本地回退到不同的数据库。
在 settings.py 文件中,将DATABASE变量替换为:
DATABASES = {}
try:
from local_settings import *
except ImportError, e:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
现在在settings.py所在的目录中创建 local_settings.py ,然后输入以下代码:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'db.djangodb',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ()
TEMPLATE_DIRS = ()
现在将local_settings.py文件添加到 .gitignore 文件中。
运行$ python manage.py syncdb
,现在您可以在本地运行django服务器。
大部分内容都来自我发现的博文中的复制意大利面: http://grigory.ca/2012/09/getting-started-with-django-on-aws-elastic-beanstalk/