Развертывание приложения Flask в Heroku дает ошибку ImportError от psycopg2

1

Недавно я изучаю Flask по книге "Flask Web Development". Когда я завершил код и развернул его в Heroku, произошла следующая ошибка:

ImportError: /app/.heroku/python/lib/python3.6/
sitepackages/psycopg2/.libs/libresolv-2-c4c53def.5.so: 
symbol __res_maybe_init version GLIBC_PRIVATE not defined 
in file libc.so.6 with link time reference

Однако это прекрасно работает на местном уровне. Я искал соответствующие вопросы о psycopg2, и я скорректировал версию psycopg2 но такая же ошибка все еще происходит. Пожалуйста, как я могу решить проблему?

Теги:
flask
psycopg2
heroku

2 ответа

1

У меня та же проблема. Я решил это, заставив герою очистить виртуальную среду python и переустановить файл requirements.txt с помощью psycopg2>=2.7,<2.8 --no-binary psycopg2. Я должен признать, что это немного похоже на магию, но для чего стоит здесь шаги, которые я сделал:

  1. Используя Git Bash для Windows, я вошел в систему с герокой с heroku login.
  2. Затем я перешел к корневой папке папки git/project, над которой я работал.
  3. Там я убедился, что my requirements.txt обновлен, запустив venv/Scripts/pip freeze > requirements.txt. Вероятно, вам придется найти свой собственный путь к python/virtual environment.
  4. Затем я изменил строку/запись для psycopg2 на psycopg2>=2.7,<2.8 --no-binary psycopg2.
  5. Затем сохранили все содержимое файла requirements.txt на моем рабочем столе, убедившись, что в папке моего проекта пусто. Не уверен, нужен ли этот шаг. Но это то, что я сделал, поэтому я просто расскажу об этом здесь.
  6. Теперь в терминале Git Bash я запускал heroku apps:info -a blogglistene чтобы найти версию моего стека героику, для меня была heroku-18.
  7. Затем я смотрю онлайн поддерживаемые версии python для heroku-18. Он сказал, что по умолчанию был python-3.6.6 (который я тогда считал тем, с которым я работал) и некоторые другие.
  8. Затем я выбрал python-2.7.15 произвольно из списка и добавил этот текст в файл runtime.txt который я поместил в корень моей папки проекта.
  9. Затем я совершил и подтолкнул это к моей героине git repo, и он был развернут. Это временно нарушит сборку. Из того, что я понимаю, волшебство в этом заключается в том, что герой теперь полностью разрушает интерпретируемый python и среду, поэтому никаких затяжных кешированных файлов или чего-либо еще. С чистого листа.
  10. Затем я вернул содержимое runtime.txt по умолчанию python-3.6.6 и добавил содержимое файла requirements.txt, убедившись, что внесенные изменения есть.
  11. Наконец, я сделал это и нажал эту кнопку, и мое приложение было загружено и запущено.
0

У меня была точно такая же проблема, когда я изучал "Flask Web Development". Я потратил целый день, пытаясь решить его, и в конце концов мне это удалось. Это не так сложно, как метод Андре С. Андерсена.

  1. Убедитесь, что вы находитесь на главной ветке. Не другие отрасли.

Книга является вторым изданием Мигеля Гринберга в Flask Web Development. Глава 17. Развертывание. Когда вы работаете до развертывания с помощью git push. После git push heroku master чтобы загрузить приложение на геройку пульта. Приложение развернуто и запущено, но оно не будет работать правильно, поскольку команда развертывания, которая инициализирует таблицы базы данных, еще не выполнена. Вам нужно использовать

heroku run flask deploy

создать базу данных по героку. Вот откуда возникла проблема.

Потому что в этот момент ваш заголовок Git-репо находится на 17c. Это еще не ветка master. Если вы сделаете коммит сейчас, это не изменит среду герою. Смысл, когда вы делаете

git branch

Ты увидишь:

(HEAD detached from 17c)
  master

Но это не то, что вы хотите. Не голова прикреплена к 17c. Вы хотите видеть только master

Который достигнут с

git checkout master

Тогда git branch покажет только главную ветку. Поэтому вы можете вносить коррективы в проект и обновлять геройку. Делайте это, потому что вы в конечном итоге будете использовать git push to master branch. Я думаю, что вы можете сделать толчок к другим веткам, чтобы Heroku работал, но я не знаю, как это сделать.

  1. Замените psycopg2==2.7.3 на psycopg2-binary==2.8.3

Потому что psycopg2 2.7.3 выдаст вам ошибку GLIBC_PRIVATE. (Вы можете проверить это с помощью heroku run bash затем запустите python, импортируйте psycopg2, если в heroku зависимость 2.7.3, вы увидите ту же ошибку.)

Теперь измените строку требований /heroku.txt (зависимость от окружающей среды heroku) psycopg2==2.7.3 на psycopg2-binary==2.8.3. По какой-то причине бинарная версия psycopg2 будет работать без проблем (не знаю почему. Но я видел МНОГО дискуссий о стековере). Затем,

git add. git commit -m "notes"

По-прежнему.

git push heroku master

подтолкнуть к героку мастер ветки. Если вы не сделаете первый шаг, то git покажет Everything up-to-date. Поэтому не будет вносить изменения, потому что вы обязуетесь не осваивать. Теперь вы можете видеть, что git загружает psycopg2-бинарный файл.

Вы можете дважды проверить, что это действительно psycopg2-бинарный файл, открыв heroku bash, а затем pip list. Вы увидите как psycopg2, так и psycopg2-бинарный файл. Теперь запустите Python, вы можете импортировать psycopg2 без проблем.

В заключение. heroku run flask deploy. Вуаля!

Я застрял на первом шаге. Поскольку все изменения, которые я сделал с героем проекта, просто не обновляются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню