Encountering psycopg.OperationalError: connection is bad: Temporary failure in name resolution, when attempting to run migrations using GitHub Actions

huangapple go评论107阅读模式
英文:

Encountering psycopg.OperationalError: connection is bad: Temporary failure in name resolution, when attempting to run migrations using GitHub Actions

问题

目前正在尝试使用Django作为服务器和PostgreSQL作为数据库来实施项目的后端CI。我正在使用GitHub Actions自动化这个过程,以便在每次拉取请求时触发,但当它尝试执行迁移时,它会给我报错,标题中提到的错误。我暂时将其更改为在分支推送时运行,以便每次测试时都不必创建新的拉取请求。

这是.yml文件中相关部分的内容:

  1. name: Backend CI
  2. on:
  3. push:
  4. branches:
  5. - test-branch
  6. jobs:
  7. build:
  8. runs-on: ubuntu-latest
  9. defaults:
  10. run:
  11. working-directory: server
  12. services:
  13. db:
  14. image: postgres
  15. env:
  16. POSTGRES_HOST: db
  17. POSTGRES_USER: postgres
  18. POSTGRES_PASSWORD: password
  19. POSTGRES_DB: github-actions
  20. ports:
  21. - 5432:5432
  22. options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
  23. steps:
  24. ...
  25. - name: Run Migrations
  26. env:
  27. API_SECRET_KEY: secret-key
  28. POSTGRES_HOST: db
  29. POSTGRES_PASSWORD: password
  30. POSTGRES_PORT: 5432
  31. run: |
  32. source .venv/bin/activate
  33. python manage.py migrate
  34. ...

我预期迁移会顺利运行,但实际上它给我报了标题中的错误。

我到目前为止尝试过的方法有:

  • 为数据库指定主机名
  • 为服务器提供了连接的预期主机名和密码

有人告诉我要检查是否在容器中运行Django,我认为我是在容器中运行的?我之前的假设是Django和数据库将在同一个虚拟环境中运行。

英文:

Currently attempting to implement backend CI for a project using Django for the server and PostgreSQL for the database. I'm automating this using GitHub Actions to occur whenever a pull request is done, but when it tries to attempt migrations, it gives me the error mentioned in the title. I've temporarily changed it to run on a push to the branch so I don't have to make a new pull request every time I want to test it.

This is the relevant bits from the .yml file:

  1. name: Backend CI
  2. on:
  3. push:
  4. branches:
  5. - test-branch
  6. jobs:
  7. build:
  8. runs-on: ubuntu-latest
  9. defaults:
  10. run:
  11. working-directory: server
  12. services:
  13. db:
  14. image: postgres
  15. env:
  16. POSTGRES_HOST: db
  17. POSTGRES_USER: postgres
  18. POSTGRES_PASSWORD: password
  19. POSTGRES_DB: github-actions
  20. ports:
  21. - 5432:5432
  22. options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
  23. steps:
  24. ...
  25. - name: Run Migrations
  26. env:
  27. API_SECRET_KEY: secret-key
  28. POSTGRES_HOST: db
  29. POSTGRES_PASSWORD: password
  30. POSTGRES_PORT: 5432
  31. run: |
  32. source .venv/bin/activate
  33. python manage.py migrate
  34. ...

What I expected to happen was for migrations to run smoothly, but it instead throws me the error from the title.

What I've tried so far:

  • Specifying hostname for the db
  • Providing the expected hostname and password for the server to connect to

Someone I asked told me to check if I'm running Django in the container and I think I am? I was under the assumption that Django was running in the same virtual environment as the database would be.

答案1

得分: 0

奇怪的是,似乎有效的方法是取消指定主机名,我从服务块中删除了POSTGRES_HOST: db,并在迁移部分的主机名中将db更改为localhost。

英文:

Strangely what seemed to work was unspecifying a hostname, I took out POSTGRES_HOST: db from the services block and changed db to localhost in the host name under the migrations bit.

huangapple
  • 本文由 发表于 2023年7月11日 12:29:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/76658719.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定