数据库无法将django app部署到amazon beanstalk

时间:2015-10-14 16:56:59

标签: django amazon-web-services web-deployment elastic-beanstalk

我尝试将我的Django应用程序部署到AWS beanstalk。为此,我遵循了这个教程: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-django.html

但是,当我使用eb create部署应用程序时,我收到MySQL错误

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

我猜这是因为我还没有完成任何数据库配置(上面的文档甚至没有提到配置步骤)。因此,我尝试使用本指南添加RDS数据库:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html

现在,我收到错误

RDS requires that you have a subnet selected in at least two Availability Zones.

当我尝试创建此子网时,会出现涉及VPN等的其他问题。有人可以请帮助我在aws上运行一个简单的django应用程序吗? 谢谢!

5 个答案:

答案 0 :(得分:1)

由于您使用的是弹性beanstalk,因此请勿创建单独的RDS。您可以使用AWS控制台部署django应用程序。 在部署应用程序时选择RDS配置,子网设置全部由它自己处理

答案 1 :(得分:0)

在创建应用时创建数据库。

eb create --database --database.engine mysql --region eu-west-1

<强>更新

您可以像这样设置数据库用户和密码:

eb create --database --database.engine mysql --database.password <password> --database.username <username> --region eu-west-1

以下是所有可用选项。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-create.html

答案 2 :(得分:0)

我假设你的settings.py中有HOST ='localhost'。 Django将尝试通过Unix套接字连接到Mysql。您可能希望通过TCP连接到MySQL。

在settings.py中的DATABASES dict中: 将主机设置为127.0.0.1

答案 3 :(得分:0)

您需要按照此处所述创建子网

创建数据库子网组

https://console.aws.amazon.com/rds/打开Amazon RDS控制台。

在导航窗格中,单击“子网组”。

单击“创建数据库子网组”。

单击“名称”,然后键入数据库子网组的名称。

单击“说明”,然后描述您的数据库子网组。

在VPC ID旁边,选择您创建的VPC的ID。

单击“添加子网”中的“添加所有子网”链接到此子网组部分。

完成后,单击是,创建 在确认窗口中,单击“关闭”。

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo-vpc-rds.html#AWSHowTo-vpc-rds-subnet

答案 4 :(得分:0)

就我而言,我需要回退到本地 sql 数据库。在开发过程 (eb deploy) 中,没有直接找到 RDS env-vars:

import logging

logger = logging.getLogger(__name__)
if 'RDS_HOSTNAME' in os.environ:
    logger.error('Loggger: RDS!')
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            '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'],
        }
    }
else:
    logger.error('Loggger: Local!')
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }