移除container_commands后部署成功,执行migrate报RDS_DB_NAME不存在
解决EB实例ssh执行migrate时找不到RDS环境变量的问题
问题原因
AWS Elastic Beanstalk的环境变量存储在实例的特定文件中,普通SSH登录的shell会话不会自动加载这些变量,导致直接执行python manage.py migrate时无法读取到RDS_DB_NAME等配置。
解决方案
1. 临时加载环境变量后执行命令
- 先加载EB环境变量:
或者使用EB官方工具读取:export $(cat /opt/elasticbeanstalk/deployment/env | xargs)export $(/opt/elasticbeanstalk/bin/get-config environment | xargs) - 切换到Django应用所在目录(默认路径为
/var/app/current):cd /var/app/current - 若使用了Python虚拟环境,先激活(路径需根据实际情况调整):
source /var/app/venv/staging-LQM1lest/bin/activate - 最后执行迁移命令:
python manage.py migrate
2. 配置自动加载环境变量
编辑当前用户的~/.bashrc文件,添加别名简化操作:
echo "alias load-eb-env='export $(cat /opt/elasticbeanstalk/deployment/env | xargs)'" >> ~/.bashrc
执行以下命令使配置生效:
source ~/.bashrc
后续SSH登录实例后,只需先执行load-eb-env,再切换到应用目录执行迁移即可。
3. 确认环境变量是否已配置
若加载变量后仍提示找不到RDS_DB_NAME,先检查EB环境是否已配置该变量:
/opt/elasticbeanstalk/bin/get-config environment | grep RDS_DB_NAME
若无输出,需登录AWS控制台,进入对应Elastic Beanstalk环境的配置>软件>环境属性,添加完整的RDS相关变量:RDS_DB_NAME、RDS_USERNAME、RDS_PASSWORD、RDS_HOSTNAME、RDS_PORT。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

