Elastic Beanstalk 未创建 RDS 参数

Posted

技术标签:

【中文标题】Elastic Beanstalk 未创建 RDS 参数【英文标题】:Elastic Beanstalk not creating RDS Parameters 【发布时间】:2013-08-12 02:48:31 【问题描述】:

我正在学习本教程以在 AWS 上创建一个 Django 应用程序。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_django.html

我能够使用本地 sqlite 数据库使一切工作,但我正在尝试将应用程序推送到生产服务器。在执行 Elastic Beanstalk 初始化过程时,我选择创建一个 RDS 实例。

我的 mysite/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'],
    

此时我应该可以访问 RDS 参数,但我没有。 manage.py 文件变为无响应。

(djangodev)laptop-id:mysite user-name$ python manage.py runserver
Unknown command: 'runserver'
Type 'manage.py help' for usage.

(djangodev)laptop-id:mysite use-name$ python manage.py
Usage: manage.py subcommand [options] [args]

Options:
  -v VERBOSITY, --verbosity=VERBOSITY
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings=SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath=PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Print traceback on exception
  --version             show program's version number and exit
  -h, --help            show this help message and exit
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 376, in execute
    sys.stdout.write(self.main_help_text() + '\n')
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 242, in main_help_text
    for name, app in six.iteritems(get_commands()):
  File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 109, in get_commands
    apps = settings.INSTALLED_APPS
  File "/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 132, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/andrewcopp/Developer/mysite/mysite/settings.py", line 17, in <module>
   'NAME': os.environ['RDS_DB_NAME'],                      # Or path to database file if using sqlite3.
  File "/tmp/djangodev/bin/../lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'RDS_DB_NAME'

知道我可能忽略了什么吗?我可以提供任何更多信息来说明问题

【问题讨论】:

如果我没记错的话,应该已经创建了一个 env 文件,其中设置了这些变量。尝试source ./env,然后重试您的命令。 记得忽略你的 local_settings.py 和 local_settings.pyc 【参考方案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'],
        
    

现在在您的 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/

【讨论】:

感谢您的回复。我实际上从使用 Django 切换到 Rails,并且在 Ruby 环境中没有遇到同样的问题。我会尝试在某个时候返回并验证您的回复,以便我可以选择您的答案(如果它是正确的)。

以上是关于Elastic Beanstalk 未创建 RDS 参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 RDS 实例快照创建 Elastic Beanstalk 环境

无法连接到使用 Elastic Beanstalk 创建的 RDS 实例

如何为 RDS 配置 Elastic Beanstalk

Elastic Beanstalk CLI,如何使用 RDS 实例创建环境?

访问通过 Elastic Beanstalk 创建的 RDS 数据库

恢复 Elastic Beanstalk RDS