Heroku CI与Postgres postgis扩展

3

我在Heroku的数据库中使用了postgis扩展。在生产环境中,这个扩展能够很好地工作,我可以完成地图映射等工作。

但是,在HerokuCI上构建我的应用程序时遇到了问题,因为测试环境中的数据库插件没有安装GDAL(postgis扩展的一部分):

django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal", "GDAL", "gdal2.3.0", "gdal2.2.0", "gdal2.1.0", "gdal2.0.0", "gdal1.11.0"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
-----> test command `python manage.py migrate --noinput && python manage.py test` failed with exit status 1

我无法找到如何在Heroku CI环境中创建扩展的方法。Heroku的应用程序json模式没有说明如何在测试数据库上创建扩展。
我知道不能在CI中使用in-dyno数据库,因为postgis不是可用的扩展,但我并不使用in-dyno数据库,我正在使用一个计划......
这是我的应用程序模式:
{
  "name": "mymegaapp",
  "scripts": {
    "heroku-prebuild": "create extension postgis",
    "heroku-postbuild": "echo heroku-postbuild script runs here."
  },
  "env": {
  },
  "formation": {
  },
  "addons": [
  ],
  "buildpacks": [
    {
      "url": "heroku/python"
    },
    {
      "url": "heroku/nodejs"
    }
  ],
  "environments": {
    "test": {
      "scripts": {
        "test": "python manage.py migrate --noinput && python manage.py test"
      },
      "env": {
        "DJANGO_DEBUG": "1"
      },
      "addons":[
        {
          "plan": "heroku-postgresql",
          "options": {
            "version": "11"
          }
        },
        "heroku-redis:hobby-dev"
      ]
    }
  }
}

请注意,我已尝试在预构建脚本中创建postgis扩展,但没有任何区别。
我还尝试在测试脚本之前调用创建操作:
      "scripts": {
        "test": "heroku create extension postgis && python manage.py migrate --noinput && python manage.py test"
      },

这是由于dyno中未安装heroku cli而导致无法使用。

关键问题:

  1. 如何在HerokuCI中创建扩展?
  2. 在HerokuCI中,postgis是被允许的扩展吗?
2个回答

3

你差不多已经做到了。没有直接从CLI创建pg扩展的一流支持。但是,你可以将语句传递给psql

在你的postdeploy或test setup脚本中尝试以下内容:psql -c "create extension postgis" $DATABASE_URL。如你所知,你需要使用真实的数据库来完成此操作,而不是在dyno内。如果你将数据库附加为除DATABASE_URL之外的其他内容,则需要在脚本中进行更新。

[OP编辑添加有用信息] 在这种情况下,还需要GDAL库,可以通过将BUILD_WITH_GEO_LIBRARIES环境变量设置为1来安装。在app.json中的最终工作解决方案如下:

  "environments": {
    "test": {
      "scripts": {
        "postdeploy": "psql -c \"create extension postgis\" $DATABASE_URL",
        "test": "python manage.py migrate --noinput && python manage.py test"
      },
      "env": {
        "DJANGO_DEBUG": "1",
        "BUILD_WITH_GEO_LIBRARIES": "1"
      },
      "addons":[
        {
          "plan": "heroku-postgresql",
          "options": {
            "version": "11"
          }
        }
      ]
    }
  }

0

这里是2021年的更新,因为设置BUILD_WITH_GEO_LIBRARIES已经被Heroku弃用并不再支持:

这个app.json文件适用于我的Django/Heroku CI设置:

{
  "buildpacks": [
    {
      "url": "https://github.com/heroku/heroku-geo-buildpack.git"
    },
    {
      "url": "heroku/python"
    }
  ],
  "environments": {
    "test": {
      "scripts": {
        "test": "python3 manage.py migrate --noinput && python3 manage.py test --keepdb"
      },
      "env": {
        "DJANGO_DEBUG": "1"
      }
    }
  }
}

多好笑。数年后我重拾了同一个应用程序,而在你输入时,我通宵达旦地将其部署以进行演示,这导致时间非常紧迫,因为它花费了很长时间来进行 Docker 化并部署到 GCloud!(我厌倦了 Heroku Buildpack 的不稳定性)。不过还是谢谢你的更新! :) - thclark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接