【问题标题】:How to add postgis extension to postgresql database in gitlab-ci.yml如何在 gitlab-ci.yml 中向 postgresql 数据库添加 postgis 扩展
【发布时间】:2019-06-02 21:31:57
【问题描述】:

我正在gitlab-ci.yml 文件中设置测试阶段,但在为 postgresql 数据库配置 postgis 扩展时出现错误。

我需要 DATABASE_URL,例如 postgis://... 用于我的 Django 环境

我的最新版gitlab-ci.yml

image: python:3.6

services:
  - postgres:9.6

variables:
  POSTGRES_DB: test_db
  POSTGRES_USER: test_user
  POSTGRES_PASSWORD: test_pass
  DATABASE_URL: "postgis://test_user:test_pass@postgres:5432/test_db"

stages:
  - test
  - build

test:
  stage: test
  script:
    - apt-get update -qy
    - apt-get -y install binutils libproj-dev gdal-bin postgis*
    - pip3 install pipenv
    - pipenv install --dev
    - export DATABASE_URL=$DATABASE_URL
    - pipenv run test

Gitlab Pipeline 错误响应:

Running with gitlab-runner 11.5.0 (3afdaba6)
  on docker-auto-scale fa6cab46
Using Docker executor with image python:3.6 ...
Starting service postgres:9.6 ...
Pulling docker image postgres:9.6 ...
$ export DATABASE_URL=$DATABASE_URL
$ pipenv run test
/root/.local/share/virtualenvs/pixel-api-yo4gnz48/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
  """)
Creating test database for alias 'default'...
Traceback (most recent call last):
  File "/root/.local/share/virtualenvs/pixel-api-yo4gnz48/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
    return self.cursor.execute(sql)
psycopg2.OperationalError: could not open extension control file "/usr/share/postgresql/9.6/extension/postgis.control": No such file or directory

django.db.utils.OperationalError: could not open extension control file "/usr/share/postgresql/9.6/extension/postgis.control": No such file or directory

【问题讨论】:

  • 为什么你认为你需要一个以postgis://... 开头的URI?它只是 pg 的扩展而不是单独的协议。
  • @JakubKania 因为我使用 dj-database-url 库来加载 DATABASE_URL

标签: python django postgresql postgis gitlab-ci


【解决方案1】:

您可以使用已经有 postgis 的服务并安装二进制文件,如下所示:

services:
  - mdillon/postgis:9.4

variables:
  POSTGRES_DB: "db_name"
  POSTGRES_USER: "db_user"
  POSTGRES_PASSWORD: "db_pwd"
  POSTGRES_HOST: "db"
  POSTGRES_PORT: "5432"
  DATABASE_URL: 
  "postgres://db_user:db_pwd@mdillon__postgis/db_name"

before_script:
  - apt-get update -qy
  - apt-get -y install binutils libproj-dev gdal-bin
  - python -V
  - pip3 install -r requirements.txt

参考资料: -https://www.hackzine.org/postgis-on-gitlab-ci.html

【讨论】:

    【解决方案2】:

    尝试使用django documentation的替代选项:

    from django.contrib.postgres.operations import CreateExtension
    from django.db import migrations
    
    class Migration(migrations.Migration):
    
        operations = [
            CreateExtension('postgis'),
            ...
        ]
    

    【讨论】:

    • 谢谢,我将其添加到我的迁移中,但 gitlab-runner 出现新错误:django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal", "GDAL", "gdal2.2.0", "gdal2.1.0", "gdal2.0.0", "gdal1.11.0", "gdal1.10.0", "gdal1.9.0"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
    • 尝试安装apt-get -y install binutils libproj-dev gdal-bin
    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2014-05-08
    • 2015-02-17
    • 2017-01-20
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多