如何在Heroku自动拉取git子模块的最新提交?

6
我有一个COVID-19报告Web应用程序,托管在Heroku上(http://www.rajcovid19.info),其中的数据来自John Hopkins大学Git存储库。我已将该存储库添加为我的主项目存储库的子模块,我使用它来推送更改到Heroku。这使我能够在计算机上拉取COVID-19存储库的更新,然后将这些更改推送到Heroku。但是,我无法直接将最新提交的COVID-19子模块拉到Heroku应用中。我尝试使用GitPython,但每当我尝试拉取更改时,它都会产生“无效的Git存储库”错误。

我目前解决这个问题的工作方案是在我的笔记本电脑上制作一个脚本,定期检查COVID-19存储库是否有更改,然后将它们推送到Heroku应用程序。

这个方法可行,但需要我每天至少打开一次我的笔记本电脑。

是否可能让Heroku自动拉取子模块的最新提交?

编辑:

根据Heroku,该服务具有“短暂存储”: Heroku短暂存储 我认为这可能也会使事情变得复杂?
至于我的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")

这在我的电脑上可以运行,但在Heroku应用程序上会出现“无效的Git Repo”错误。我进行了一些调试,并确保在Heroku应用程序上仓库的路径是正确的,但似乎并没有帮助。

1
我尝试使用GitPython,但每当我尝试拉取更改时,它会产生一个“无效的Git存储库”错误。好吧,那么请展示你的代码,我们会帮助你找出为什么它不起作用。 - larsks
@larsks 我在编辑中添加了代码。 - Aniansh
1个回答

6
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文件,解压缩并提供数据。您需要创建一个startup.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

我建议采用第二种方法。如果您想要数据版本控制,则建议使用第一种方法。

我目前正在使用您提出的第一种解决方案。第二个选项并不是可行的,因为数据存储库很大,我不能让应用在提供页面之前下载存储库。我知道我试图实现的内容在Heroku上不受支持,所以我想我会继续使用当前的方法。 - Aniansh

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