【问题标题】:Heroku CI with Postgres postgis extension带有 Postgres postgis 扩展的 Heroku CI
【发布时间】:2019-08-14 13:03:00
【问题描述】:

我在 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's app json schema 只字不提如何在测试数据库上创建扩展。

我知道我不能将 in-dyno 数据库用于 CI,如 postgis is not an available extension for that,但我没有使用 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"
      },

这不起作用,因为 heroku cli 没有安装在 dyno 中。

关键问题:

  1. 如何在 HerokuCI 中创建扩展?
  2. postgis 在 HerokuCI 中是否是一个允许的扩展?

【问题讨论】:

    标签: heroku postgis heroku-postgres heroku-ci


    【解决方案1】:

    你几乎得到它。直接从 CLI 创建 pg 扩展没有一流的支持。但是,您可以将语句传递给psql

    在您的部署后或测试设置脚本中试试这个: psql -c "create extension postgis" $DATABASE_URL 如您所知,您需要使用真实数据库而不是动态数据库来执行此操作。如果您已将数据库附加为 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"
              }
            }
          ]
        }
      }
    

    【讨论】:

      【解决方案2】:

      这里是 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"
            }
          }
        }
      }
      

      【讨论】:

      • 真有趣。多年后,我拿起了同一个应用程序,当你打字的时候,正在通宵工作以将其部署为一个演示,因为它花费了很长时间来 dockerise 和部署到 GCloud! (我厌倦了 heroku buildpacks 的脆弱性)。不过还是谢谢你的更新! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      相关资源
      最近更新 更多