AWS Beanstalk Django/Python выполняет локальную проблему

Я выполнил руководство «Развертывание приложения Django в AWS Elastic Beanstalk», предоставленное Amazon, но я пытаюсь запустить проект локально и получаю ошибку 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.

Был еще один вопрос о стеке, который также не дал решения. Elastic Beanstalk не создает параметры RDS

У меня он работает на AWS, просто запустить локальный экземпляр сложно.


person digitaldavenyc    schedule 19.11.2013    source источник


Ответы (1)


Пришлось долго копаться, но я нашел решение. Вам нужен локальный резервный вариант для другой базы данных.

В файле 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'],
        }
    }

Теперь создайте local_settings.py в том же каталоге, что и ваш 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/

person digitaldavenyc    schedule 20.11.2013