геоджанго на героку - PullRequest
0 голосов
/ 11 ноября 2018

Я использую heroku для разработки бэкэнда для django. Я бы хотел, чтобы geoDjango использовал пространственные объекты с моими моделями. Я выполнил все шаги, описанные в django и heroku docs, но все равно получаю сообщение об ошибке, когда хочу запустить manage.py migrate или другой запрос и команду на сервере:

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

Я проверил с помощью bash, верно ли это, и да, в моем поставщике нет каталога lib. Я не знаю много о buildpacks и config на heroku, поэтому я не знаю, с чего начать, чтобы исправить эту ошибку. Вот мой buildspack:

  1. https://github.com/cyberdelia/heroku-geo-buildpack.git
  2. Heroku / питон

И в мои .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')

Я немного растерялся, поэтому помощь будет принята с благодарностью

EDIT: Поэтому я попытался понизить свой стек до 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

1 Ответ

0 голосов
/ 13 ноября 2018

Итак, мне, наконец, удалось найти решение, я настроил две переменные в своем файле 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", иначе он не работает.

Надеюсь, это поможет

...