Heroku CI 带有 Postgres postgis 扩展
Heroku CI with Postgres postgis extension
我在 Heroku 上对我的数据库使用 postgis
扩展。在生产中这很好用;我正在像老板一样映射。
但是,我无法让我的应用程序在 Heroku 上构建CI,因为测试环境中的数据库插件没有安装 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 只字不提如何在测试数据库上创建扩展。
我知道我不能为 CI 使用 in-dyno 数据库,因为 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 中。
关键问题:
- 如何在 Heroku 中创建扩展CI?
- postgis 是 Heroku 中允许的扩展吗CI?
你快搞定了。没有第一个 class 支持直接从 CLI 创建 pg 扩展。但是,您可以将语句传递到 psql
.
在部署后或测试设置脚本中试试这个:
psql -c "create extension postgis" $DATABASE_URL
如您所知,您需要使用真实的数据库而不是 in-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"
}
}
]
}
}
这里是 2021 年的更新,因为设置 BUILD_WITH_GEO_LIBRARIES 现在已被 Heroku 弃用且不受支持:
这 app.json 适用于我的 CI Django / Heroku 设置:
{
"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"
}
}
}
}
我在 Heroku 上对我的数据库使用 postgis
扩展。在生产中这很好用;我正在像老板一样映射。
但是,我无法让我的应用程序在 Heroku 上构建CI,因为测试环境中的数据库插件没有安装 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 只字不提如何在测试数据库上创建扩展。
我知道我不能为 CI 使用 in-dyno 数据库,因为 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 中。
关键问题:
- 如何在 Heroku 中创建扩展CI?
- postgis 是 Heroku 中允许的扩展吗CI?
你快搞定了。没有第一个 class 支持直接从 CLI 创建 pg 扩展。但是,您可以将语句传递到 psql
.
在部署后或测试设置脚本中试试这个:
psql -c "create extension postgis" $DATABASE_URL
如您所知,您需要使用真实的数据库而不是 in-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"
}
}
]
}
}
这里是 2021 年的更新,因为设置 BUILD_WITH_GEO_LIBRARIES 现在已被 Heroku 弃用且不受支持:
这 app.json 适用于我的 CI Django / Heroku 设置:
{
"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"
}
}
}
}