导入数千条记录后无法推送到Heroku

时间:2018-12-06 01:44:44

标签: ruby git heroku sqlite ruby-on-rails-5

我有一个问题,我认为我的sqlite3数据库太大。我将大约100,000条记录导入到数据库中,并且能够“ git push”和“ git push heroku”。现在我可能犯了一个错误,导入了太多记录... 500,000。我能够推送到git(现在它在bitbucket中显示大约336MB),这似乎可以工作,但是当我推送到heroku时,这就是我得到的:

/workspace/new_foodback$ git push heroku
Counting objects: 26, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (25/25), done.
Writing objects: 100% (26/26), 159.26 MiB | 1.43 MiB/s, done.
Total 26 (delta 20), reused 1 (delta 0)
remote: 
remote: !       Size of checkout and restored submodules exceeds 1 GB. Reduce size and try pushing again.
remote: 
To https://git.heroku.com/magnetic-beach-35611.git
 ! [remote rejected]   master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/magnetic-beach-35611.git'
ubuntu@colin339-rails-tutorial-482323864:~/workspace/new_foodback$ 

我怀疑我可能必须拆分提交。我已经运行了命令sqlite3 business.db;并运行命令VACUUM FULL;。我尝试过多次推送,我曾尝试在REBASE中几次拆分提交,但我不确定100%是否是正确的方法还是我正确拆分了(第一次)。此错误总是在159.26 1.43 MiB / s,但经过一些分割后(25/25)数一​​直在增加(以前是(18/18))。有什么想法可以解决对Heroku的推动吗?

2 个答案:

答案 0 :(得分:0)

Heroku在整个提交历史记录(而不是当前文件大小)中将git repos的大小限制为1GB。您的回购可能超过1GB。

https://devcenter.heroku.com/articles/limits#git-repos

您至少有两个选择:

两者都将以重写的历史记录结尾,但是应该允许您缩小git存储库的大小。

即使您抽真空,二进制sqlite文件中仍然可能会有大量更改,因此我不确定您对数据库执行的任何操作都会使它变得更好(实际上,它将使情况变得更糟)。通过添加其他提交和大小)

Heroku似乎不适用于浅克隆,并且需要完整的历史记录,因此您可能需要重写历史记录。

您的git存储库大小超过1GB。这可能是由于您历史记录中所有先前提交的总大小(heroku需要部署完整克隆)。拆分和添加新提交只会继续增加大小。您需要确定膨胀的来源。可以是继续添加二进制文件,甚至可以是添加文件,然后再删除(通过git commit)大型二进制文件。

您可以通过在本地运行git count-objects -vH并查看size-pack size来检查存储库的大小。

您还可以尝试使用脚本来比较提交之间的差异并获取blob大小:

这里还有一些其他有关清理存储库的选项,这些选项不涉及重写历史记录:

如果您已经在本地修复了回购协议,那么如果它拒绝您的推送,则可能需要强制推送到Heroku。除此之外,我不认为您可以在Heroku方面采取任何措施来解决此问题:您需要:

  • 减小当前提交中的sqlite文件的文件大小(如果您只是添加它们而它们太大的话)
  • 重写历史记录以减小存储库的总体容量
  • 使用上述文章中的一种方法压缩文件

由于Heroku不支持lfs,而github不支持大于gitlfs(100MB)的特定大小的文件,并且bitbucket似乎没有列出限制。在这种情况下,您很可能会堆叠一堆提交,这些提交具有数百MB的二进制文件更改,彼此之间的连接使您超出1GB的限制。

Bitbucket还提供了有关如何确定实际存储库大小(而不是当前默认分支总文件大小)的更多信息:https://confluence.atlassian.com/bitbucket/what-kind-of-limits-do-you-have-on-repository-file-size-273877699.html

答案 1 :(得分:0)

我确定可能有更好的方法来解决此问题,但这就是我的方法。我最终几乎删除了我的数据库...并重新创建它,但是问题仍然存在。我发现development.log文件大约为1.8GB,因此即使在数据库上执行重置后,该问题实际上仍然存在...一旦删除了该文件,我便可以再次将其推送到Heroku。我也正在本地导入记录,并计划将其推送到git和Heroku,但是我认为这实际上是错误的方法。因此,今后我实际上将直接在网站上导入记录,并在Heroku控制台(heroku run rails控制台)中进行更改,这应该可以防止我再次遇到此问题。我怀疑我可能只是从一开始就删除了这个development.log文件,以解决无法推送到Heroku的问题。