heroku上的geoDjango

时间:2018-11-11 16:27:04

标签: django heroku gdal geodjango geos

我正在使用heroku开发django后端。我想使geoDjango可以在模型中使用空间特征。 我遵循了django和heroku文档上描述的所有步骤,但是当我要在服务器上运行manage.py migration或其他请求和命令时,仍然出现错误:

OSError: /app/.heroku/vendor/lib: cannot open shared object file: No such file or directory

我确实使用bash进行了检查,如果是,那么我的供应商中没有lib目录。我对heroku上的buildpacks和config不太了解,所以我不知道从哪里开始修复此错误。 这是我的buildspack:

  1. https://github.com/cyberdelia/heroku-geo-buildpack.git
  2. 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

2 个答案:

答案 0 :(得分:1)

所以我终于设法找到一个解决方案,正如我在其他教程和官方文档中所说的那样,我在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”,否则将无法正常工作。

我希望对您有帮助

答案 1 :(得分:1)

来到这里是因为无法将 GeoDjango 部署到 Heroku 并出现类似错误。
花了我一些时间来找出路

自 2020 年 11 月起,您将需要此构建包:heroku/heroku-geo-buildpack

来源与指南:https://devcenter.heroku.com/changelog-items/1947