我尝试将我的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应用程序吗? 谢谢!
答案 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'),
}
}