我已经按照每个指南和教程,为我的Django应用程序设置RDS MySQL。一切都在当地很好。部署时,我没有错误。我的网站运行。但是当我尝试访问我设置的restful框架,或者我尝试登录管理页面时,我得到一个不存在该表的ProgrammingError(没有表存在)。
访问数据库似乎不是问题,我的所有RDS环境变量都已设置,安全组已设置等。我甚至可以从我的本地mysql客户端访问数据库,我可以看到数据库中没有表。
我在配置文件中设置了命令以运行'django-admin.py makemigrations'和'django-admin.py migrate',我甚至尝试将其更改为'python manage.py ...'等,似乎命令永远不会起作用。
当我进入弹性beanstalk环境时,我可以使用'mysql -u my_username'进入mysql。但是,如果我导航到我的应用程序所在的文件夹,并尝试手动运行'python manage.py makemigrations',我会得到:django.db.utils.OperationalError:(1045,“访问被拒绝用户'my_username'@ 'localhost'(使用密码:YES)“)
这是我的配置......
requirements.txt
virtualenv==15.0.1
Django==1.9.5
django-compressor==2.0
django-model-utils==2.4
djangorestframework==3.3.2
dj-database-url==0.4.0
gunicorn==19.4.5
MySQL-python==1.2.5
jsonfield==1.0.3
.ebextentions / 01_packages.config
packages:
yum:
git: []
gcc: []
mysql: []
mysql-devel: []
python-devel: []
.ebextentions / project.config
container_commands:
01_makemigrations:
command: "source /opt/python/run/venv/bin/activate && python manage.py makemigrations --noinput"
leader_only: true
02_migrate:
command: "source /opt/python/run/venv/bin/activate && python manage.py migrate --noinput"
leader_only: true
03_createsu:
command: "source /opt/python/run/venv/bin/activate && python manage.py createsu"
leader_only: true
04_collectstatic:
command: "source /opt/python/run/venv/bin/activate && python manage.py collectstatic --noinput"
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'],
}
}
请帮忙。谢谢!
答案 0 :(得分:0)
查看是否在弹性beanstalk的EC2安全组中配置了RDS安全组。它应该是这样的:
EC2安全组:your-rds-security-group-name,your-Elastic-Beanstalk-Security-Group
答案 1 :(得分:0)
确保在迁移和运行时使用相同的设置!
我有一个类似的问题,但是我发现我在迁移时使用了本地设置(来自 manage.py )。但是为了运行,我使用了生产设置(在 wsgi.py 中定义)。这意味着迁移了本地数据库,但使用了生产数据库,但从未迁移,因此即使迁移命令返回成功,也不会创建表。我必须更改 django.config :
container_commands:
01_makemigrations:
command: "source /opt/python/run/venv/bin/activate && python manage.py makemigrations"
leader_only: true
02_migrate:
command: "source /opt/python/run/venv/bin/activate && python manage.py migrate"
leader_only: true
收件人:
container_commands:
01_migrate:
command: "django-admin migrate"
leader_only: true
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: fund.productionSettings
按照here的建议。