【发布时间】:2020-06-21 04:25:50
【问题描述】:
这是我第一次尝试在 gitlab 上为 Django 项目添加 CI/CD。如果成功,我想设置自动测试并部署到开发分支中的服务器。
随着测试几乎一切顺利,依赖项已安装并启动python manage.py test,但测试数据库存在问题。回溯错误有点低,这里我不太明白在测试期间与数据库的交互是如何发生的。
Creating test database for alias 'default'...
.....
MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
...
super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (2002, "Can't connect to MySQL server on '127.0.0.1' (115)")
在djangosettings.py的设置中,通过.env文件中的此类变量获取到数据库的连接器。
.env
SECRET_KEY=ja-t8ihm#h68rtytii5vw67*o8=o)=tmojpov)9)^$h%9#16v&
DEBUG=True
DB_NAME=db_name
DB_USER=username
DB_PASSWORD=dbpass
DB_HOST=127.0.0.1
随着项目的部署,一切都还不清楚。非常感谢您帮助设置它。
gitlab-ci.yml
stages:
- test
- deploy
test:
stage: test
script:
- apt update -qy
- apt install python3 python3-pip virtualenvwrapper -qy
- virtualenv --python=python3 venv/
- source venv/bin/activate
- pip install -r requirements.txt
- python manage.py test
stage: deploy
script:
...
???
only:
- develop
UPD 因此,我在 yml 文件的下一行添加了 Ruddra 建议:
services:
- mysql
variables:
# Configure mysql service (https://hub.docker.com/_/mysql/)
MYSQL_DATABASE: test
MYSQL_ROOT_PASSWORD: mysql
connect:
image: mysql
script:
- echo "SELECT 'OK';" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mysql "$MYSQL_DATABASE"
结果我得到 connect 成功状态和 test 错误 与起始问题具有相同回溯的状态
【问题讨论】:
-
您正在尝试连接到您的本地主机数据库。您需要为您的生产环境设置一个数据库,并制作一组单独的环境变量,这些变量在生产环境中是只读的
-
@Snackoverflow 你能帮我解决这个问题吗?
-
你部署到哪里?
-
我在 AWS 部署
-
查看aws.amazon.com/getting-started/tutorials/create-mysql-db 了解如何在 AWS 中设置数据库。检查这里以了解有关如何仅在生产环境中加载环境变量的更多信息:stackoverflow.com/questions/10664244/…