在Heroku上使用geoDjango

4

我正在使用heroku开发django后端。我想使用geoDjango来让我的模型支持空间特性。我按照django和heroku文档中描述的所有步骤进行操作,但是当我想在服务器上运行manage.py migrate或其他请求和命令时仍然会出现错误:

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

我检查了bash,发现我的供应商中没有lib目录。我对Heroku上的buildpack和配置不太了解,所以不知道从哪里开始修复这个错误。这是我的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

当我尝试按照这个教程操作时,甚至无法构建并获得以下信息:

-----> 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个回答

2

所以我最终找到了一个解决方案,我在我的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

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