GitHub Actions运行Django CI时找不到postgis.control但文件实际存在求助
问题根源
你配置中使用的PostgreSQL是GitHub Actions提供的独立service容器,和运行CI步骤的runner宿主机是完全隔离的环境:
- 你在
psycopg2 prerequisites步骤里安装的postgis相关包,都是装在runner宿主机的PostgreSQL路径下,你执行find命令查到的文件也是宿主机上的 - 测试阶段Django连接的是service容器里的PostgreSQL实例,这个容器用的是官方
postgres:12镜像,默认没有安装PostGIS扩展,自然会报找不到postgis.control的错误
修复方案
1. 替换PostgreSQL service镜像
直接使用官方预打包好PostGIS的镜像,不需要自己手动在容器里装扩展,修改services部分的配置:
services: postgres: # 替换为对应版本的postgis镜像,12对应postgres主版本,3.3对应postgis主版本,和你预期的安装版本匹配 image: postgis/postgis:12-3.3 ports: - 5432:5432 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: ghostlabs_localhost options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
2. 精简依赖安装步骤
不需要在runner宿主机上安装PostgreSQL服务和PostGIS服务端扩展,只保留客户端依赖即可,修改psycopg2 prerequisites步骤的run命令:
- name: psycopg2 prerequisites run: | sudo apt-get update && sudo apt-get install -y libpq-dev gdal-bin
修改后重新运行CI,测试阶段连接容器里的Postgres时,就能正常找到PostGIS扩展文件,不会再报UndefinedFile错误。
内容的提问来源于stack exchange,提问作者naohide_a
相关产品推荐
相关产品推荐

