gpt4 book ai didi

django - heroku上的geoDjango

转载 作者:行者123 更新时间:2023-12-03 23:53:41 26 4
gpt4 key购买 nike

我正在使用 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 上的 buildpacks 和 config 不太了解,所以我不知道从哪里开始修复这个错误。
这是我的构建包:
  • 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

    我还尝试了根本无法构建的不同 fork ......

    我确实把路径放在了我的设置中:
    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”,否则它不起作用。

    我希望它有帮助

    关于django - heroku上的geoDjango,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250766/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com