heroku 上的 geoDjango
geoDjango on heroku
我正在使用 heroku 开发 django 后端。我想让 geoDjango 在我的模型中使用空间特征。
我遵循了 django 和 heroku 文档中描述的所有步骤,但是当我想 运行 manage.py 迁移或服务器上的其他请求和命令时,我仍然遇到错误:
OSError: /app/.heroku/vendor/lib: cannot open shared object file: No such file or directory
我确实与 bash 确认过它是否属实,是的,我的供应商中没有 lib 目录。我不太了解 heroku 上的 buildpacks 和配置,所以我不知道从哪里开始修复这个错误。
这是我的构建包:
- https://github.com/cyberdelia/heroku-geo-buildpack.git
- heroku/python
在我的 .buildpacks 中,我尝试放入:
https://github.com/cyberdelia/heroku-geo-buildpack.git#e1b845b
https://github.com/heroku/heroku-buildpack-python.git
我还尝试了完全无法构建的不同叉子...
我确实把路径放在了我的设置中:
GEOS_LIBRARY_PATH = os.environ.get('GEOS_LIBRARY_PATH')
GDAL_LIBRARY_PATH = os.environ.get('GDAL_LIBRARY_PATH')
我有点迷茫,非常感谢您的帮助
编辑:
所以我试图将我的堆栈降级到 heroku-16(它是 heroku-18)并且它构建了但是当我想迁移它时它显示了一条新的错误消息:
OSError: /app/.heroku/vendor/lib: cannot read file data: Is a directory
当我尝试遵循 this tutorial 时,我什至无法构建和获取此内容:
-----> geos/gdal/proj app detected
Using geos version: <?xml version="1.0" encoding="UTF-8"?>
Using gdal version: <?xml version="1.0" encoding="UTF-8"?>
Using proj version: <?xml version="1.0" encoding="UTF-8"?>
/app/tmp/buildpacks/3174f4234c5151450fcaba5f50a050126498959c8209a7a6057230bfb29be2eaef3ae0098ab726ef807728f7b4792e31db50a2b89636ae181d9e71b03f2f83c1/bin/compile: line 82: [: too many arguments
/app/tmp/buildpacks/3174f4234c5151450fcaba5f50a050126498959c8209a7a6057230bfb29be2eaef3ae0098ab726ef807728f7b4792e31db50a2b89636ae181d9e71b03f2f83c1/bin/compile: line 88: [: too many arguments
/app/tmp/buildpacks/3174f4234c5151450fcaba5f50a050126498959c8209a7a6057230bfb29be2eaef3ae0098ab726ef807728f7b4792e31db50a2b89636ae181d9e71b03f2f83c1/bin/compile: line 94: [: too many arguments
cp: target '/tmp/build_a7cfd7a56646fe632a93fc752b8ee03d/.heroku/vendor/lib/.' is not a directory
! Push rejected, failed to compile geos/gdal/proj app.
! Push failed
所以我终于设法找到了解决方案,我在 settings.py 中设置了两个变量,正如在不同教程和官方文档中所说:
GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH')
GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH')
但我不知道为什么这些变量恰好是:
/app/.heroku/vendor/lib
这就是它不起作用的原因,所以我的解决方案只是硬编码我的 heroku 路径:
GEOS_LIBRARY_PATH = '/app/.heroku/vendor/lib/libgeos_c.so' if os.environ.get('ENV') == 'HEROKU' else os.getenv('GEOS_LIBRARY_PATH')
GDAL_LIBRARY_PATH = '/app/.heroku/vendor/lib/libgdal.so' if os.environ.get('ENV') == 'HEROKU' else os.getenv('GDAL_LIBRARY_PATH')
小心,你真的需要把“_c”放到"libgeos_c.so",否则它不起作用。
希望对你有帮助
来到这里是因为无法将 GeoDjango 部署到 Heroku 并出现类似错误。
花了我一些时间才找到路
自 2020 年 11 月起,您将需要此构建包:heroku/heroku-geo-buildpack
我正在使用 heroku 开发 django 后端。我想让 geoDjango 在我的模型中使用空间特征。 我遵循了 django 和 heroku 文档中描述的所有步骤,但是当我想 运行 manage.py 迁移或服务器上的其他请求和命令时,我仍然遇到错误:
OSError: /app/.heroku/vendor/lib: cannot open shared object file: No such file or directory
我确实与 bash 确认过它是否属实,是的,我的供应商中没有 lib 目录。我不太了解 heroku 上的 buildpacks 和配置,所以我不知道从哪里开始修复这个错误。 这是我的构建包:
- https://github.com/cyberdelia/heroku-geo-buildpack.git
- heroku/python
在我的 .buildpacks 中,我尝试放入:
https://github.com/cyberdelia/heroku-geo-buildpack.git#e1b845b
https://github.com/heroku/heroku-buildpack-python.git
我还尝试了完全无法构建的不同叉子...
我确实把路径放在了我的设置中:
GEOS_LIBRARY_PATH = os.environ.get('GEOS_LIBRARY_PATH')
GDAL_LIBRARY_PATH = os.environ.get('GDAL_LIBRARY_PATH')
我有点迷茫,非常感谢您的帮助
编辑: 所以我试图将我的堆栈降级到 heroku-16(它是 heroku-18)并且它构建了但是当我想迁移它时它显示了一条新的错误消息:
OSError: /app/.heroku/vendor/lib: cannot read file data: Is a directory
当我尝试遵循 this tutorial 时,我什至无法构建和获取此内容:
-----> geos/gdal/proj app detected
Using geos version: <?xml version="1.0" encoding="UTF-8"?>
Using gdal version: <?xml version="1.0" encoding="UTF-8"?>
Using proj version: <?xml version="1.0" encoding="UTF-8"?>
/app/tmp/buildpacks/3174f4234c5151450fcaba5f50a050126498959c8209a7a6057230bfb29be2eaef3ae0098ab726ef807728f7b4792e31db50a2b89636ae181d9e71b03f2f83c1/bin/compile: line 82: [: too many arguments
/app/tmp/buildpacks/3174f4234c5151450fcaba5f50a050126498959c8209a7a6057230bfb29be2eaef3ae0098ab726ef807728f7b4792e31db50a2b89636ae181d9e71b03f2f83c1/bin/compile: line 88: [: too many arguments
/app/tmp/buildpacks/3174f4234c5151450fcaba5f50a050126498959c8209a7a6057230bfb29be2eaef3ae0098ab726ef807728f7b4792e31db50a2b89636ae181d9e71b03f2f83c1/bin/compile: line 94: [: too many arguments
cp: target '/tmp/build_a7cfd7a56646fe632a93fc752b8ee03d/.heroku/vendor/lib/.' is not a directory
! Push rejected, failed to compile geos/gdal/proj app.
! Push failed
所以我终于设法找到了解决方案,我在 settings.py 中设置了两个变量,正如在不同教程和官方文档中所说:
GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH')
GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH')
但我不知道为什么这些变量恰好是:
/app/.heroku/vendor/lib
这就是它不起作用的原因,所以我的解决方案只是硬编码我的 heroku 路径:
GEOS_LIBRARY_PATH = '/app/.heroku/vendor/lib/libgeos_c.so' if os.environ.get('ENV') == 'HEROKU' else os.getenv('GEOS_LIBRARY_PATH')
GDAL_LIBRARY_PATH = '/app/.heroku/vendor/lib/libgdal.so' if os.environ.get('ENV') == 'HEROKU' else os.getenv('GDAL_LIBRARY_PATH')
小心,你真的需要把“_c”放到"libgeos_c.so",否则它不起作用。
希望对你有帮助
来到这里是因为无法将 GeoDjango 部署到 Heroku 并出现类似错误。
花了我一些时间才找到路
自 2020 年 11 月起,您将需要此构建包:heroku/heroku-geo-buildpack