Как автоматически извлечь последний коммит из подмодуля git в Heroku? - PullRequest
6 голосов
/ 25 апреля 2020

У меня есть веб-приложение для отчетности COVID-19, размещенное в Heroku (http://www.rajcovid19.info), данные для которого я получаю из репозитория Университета Джона Хопкинса Git. Я добавил репозиторий как подмодуль моего основного репозитория проекта, который я использую для изменения Pu sh в Heroku. Это позволяет мне получать обновления репозитория COVID-19 на моем компьютере и затем вносить эти изменения в Heroku. Однако я не могу перенести последние коммиты в подмодуль COVID-19 непосредственно в приложение Heroku. Я пытался использовать GitPython, но он выдает ошибку «Invalid Git Repository» всякий раз, когда я пытаюсь получить изменения.

Мое текущее рабочее решение этой проблемы - создать на моем ноутбуке скрипт, который периодически проверяет наличие изменений в репозитории COVID-19 и затем отправляет их в приложение Heroku.

Это работает, но требует мне открывать свой ноутбук хотя бы раз в день.

Можно ли каким-то образом заставить Heroku автоматически извлекать последние коммиты в подмодуль?

РЕДАКТИРОВАТЬ:

Согласно Heroku служба имеет «эфемерное хранилище»: Heroku Ephemeral Storage

Я думаю, это может усложнить ситуацию?

Что касается моего GitPython кода это не сработало, вот оно:

GitPython 1

GitPython 2

То есть:

# Root directory for the COVID-19 Local repository root=os.getcwd()

if os. path.isdir(root+"/COVID-19"):
  root+="/COVID-19"
  repo=Repo(root) git=repo.git git. pull
else:
  root+="/COVID-19"
  os.system("git clone https://github.com/CSSEGISandData/COVID-19.git")

Это работает с моим компьютером, но это дает мне ошибку "Invalid Git Repo" в приложении Heroku. Я провел некоторую отладку и убедился, что путь к хранилищу указан правильно в приложении Heroku, но, похоже, это не помогло.

1 Ответ

6 голосов
/ 29 апреля 2020

https://help.heroku.com/RR520244/why-don-t-git-submodules-work-with-heroku-pipelines-review-apps-or-github-sync

git подмодули не совместимы с Heroku, см. Предоставленную ссылку.


Вы должны решить эту проблему по-другому.

Возможные подходы:

1. Напишите скрипт, который периодически извлекает данные и добавляет их в ваш проект.

git subtree pull --prefix=data --squash --message="update covid data" https://github.com/CSSEGISandData/COVID-19.git master
git push origin HEAD

git поддеревья совместимы с Heroku. Для этого подхода вам нужно иметь VPS и добавить скрипт в cron. Cron - это мощный инструмент, который позволяет вам определять скрипты, которые периодически запускаются через определенные промежутки времени

2. При запуске приложения загрузите zip или tar.gz, распакуйте его и отправьте данные. Вам нужно будет создать скрипт запуска. sh, который сделает это, и последняя команда будет запускать вашу программу. Что-то вроде:

curl -L https://api.github.com/repos/CSSEGISandData/COVID-19/tarball > data.tar.gz
cd data && rm -r ./*
tar -xzvf ../data.tar.gz
cd ..
python main.py

Я рекомендую второй подход. Первый подход рекомендуется, если вы хотите, чтобы данные были версионными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...