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 ในพื้นที่ของฉัน

มีคำถาม stackoverflow อีกข้อหนึ่งที่ยังไม่ได้ให้วิธีแก้ปัญหาเช่นกัน 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