python - 如何自动从 Heroku 上的 git 子模块中提取最新提交?
问题描述
我有一个托管在 Heroku ( http://www.rajcovid19.info )上的 COVID-19 报告网络应用程序,我从约翰霍普金斯大学 Git 存储库中获得了这些数据。我已将存储库添加为我的主项目存储库的子模块,用于将更改推送到 Heroku。这使我能够将更新拉到我计算机上的 COVID-19 存储库,然后将这些更改推送到 Heroku。但是,我无法将 COVID-19 子模块的最新提交直接拉到 Heroku 应用程序。我尝试使用 GitPython,但每当我尝试拉取更改时,它都会产生“Invalid Git Repository”错误。
对于这个问题,我目前的工作解决方案是在我的笔记本电脑上编写一个脚本,定期检查 COVID-19 存储库的更改,然后将它们推送到 Heroku 应用程序。
这可行,但需要我每天至少打开一次笔记本电脑。
是否有可能以某种方式让 Heroku 自动将最新提交拉到子模块?
编辑:
我认为这也可能使事情复杂化?
至于我的 GitPython 代码不起作用,这里是:
那是:
# 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 应用程序上的“Invalid Git Repo”错误。我做了一些调试并确保存储库的路径在 Heroku 应用程序上是正确的,但它似乎没有帮助。
解决方案
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
我推荐第二种方法。如果您希望数据版本化,建议使用第一种方法。
推荐阅读
- javascript - 启用一键式 S3 文件下载,无需 content-disposition 标头或访问元数据
- guidewire - GuideWire 网络服务
- java - LinkedHashSet 不主插入顺序?
- amazon-web-services - executionRoleArn 和 taskRoleArn 有什么区别以及如何找到它们?
- php - DBAL QueryBuilder:避免 SQL 注入的更安全的方法是什么?
- java - JAVA:在 ArrayList 中添加“Shape”类型的对象?
- java - 在 java multi-catch 中,每个 multi-catch 字符都是最终的,但我无法得到它
- php - Laravel 6 表单数组验证
- reactjs - React Material - MUIDataTable - 如何在列标题中添加内容
- swift - Wy md5 hash 使用 swift 给了我不同的结果