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

2024-04-27

我有一个问题,我认为我的 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$ 

我怀疑我可能必须拆分提交。我已经运行命令 sqlite3business.db;并运行命令 VACUUM FULL;。我尝试过多次推送,我尝试过在 REBASE 中多次拆分提交,但我不能 100% 确定这是否是正确的方法,或者我是否正确地拆分了它(第一次)。此错误总是发生在 159.26 MiB | 1.43 MiB/s,但经过一些分割后,(25/25) 数字一直在增加(之前是 (18/18))。我有什么想法可以解决 Heroku 的推送问题吗?


Heroku 将整个提交历史记录的 git 存储库大小限制为 1GB(不是当前文件大小)。您的存储库可能超过 1GB。

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

您至少有两个选择:

  • 进行交互式变基以压缩您最近的一些提交。
  • 从历史记录中删除 sqlite 数据库,然后重新添加它。https://help.github.com/articles/removing-sensitive-data-from-a-repository/ https://help.github.com/articles/removing-sensitive-data-from-a-repository/

两者最终都会重写历史记录,但应该允许您缩小 git 存储库的大小。

即使你清理了,你的二进制 sqlite 文件中仍然可能有大量的更改,所以我不确定你对数据库采取的任何操作是否会使其变得更好(事实上,通过添加额外的内容会使情况变得更糟)提交和大小)

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

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

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

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

  • https://stackoverflow.com/a/10847242/2892779 https://stackoverflow.com/a/10847242/2892779
  • https://stackoverflow.com/a/1318854/2892779 https://stackoverflow.com/a/1318854/2892779

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

  • https://stackoverflow.com/a/2116892/2892779 https://stackoverflow.com/a/2116892/2892779

如果您已经在本地修复了存储库,则如果 Heroku 拒绝您的推送,您可能需要强制推送到 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 https://confluence.atlassian.com/bitbucket/what-kind-of-limits-do-you-have-on-repository-file-size-273877699.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导入数千条记录后无法推送到 Heroku 的相关文章

  • 使用 ruby​​ 获取 URL 的内容长度

    我正在尝试编写一个 ruby 脚本 该脚本使用以下命令获取有关网站上文件的一些详细信息net http 我的代码如下所示 require open uri require net http url URI parse asset res N
  • 广告过滤服务器端[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在开发一个 Web 应用程序 在其中显示来自其他网站的 HTML 在显示最终版本之前 我想去掉广告 关于如何实现这一目标有什么想法
  • 让“git pull”在拉取不同分支时要求确认

    当同时处理许多项目和分支时 我偶尔会犯一些愚蠢的错误 比如拉入错误的分支 例如在分支上master I did git pull origin dangerous code并且有一段时间没有注意到这一点 这个小错误造成了很大的混乱 当我尝试
  • git push heroku master 通过代理后面的 ssh 出现错误

    简要背景 大家好 我是一名大学生 代理 10 3 100 211 8080 刚接触 ROR Git 和 Heroku 一直在关注 Ruby on Rails 教程 我解决了通过 ssh 推送 git repo 的问题 在我的 ssh con
  • 如何将模块化 Sinatra 应用程序部署到 Heroku?

    由于某种原因 我无法访问公共目录中的任何文件 未发现错误 我不会把public显然 URL 中的一部分 查看GitHub 上的 Lovers 源代码存储库 https github com mattdipasquale loversapp
  • 当查询没有返回记录时,如何通过 PDO/Sqlite 获取列名?

    下面的代码允许我将 SQL 语句传递给一个类并调用其方法来显示一个漂亮的结果表 包括列名 然而 如果没有结果 我仍然想要列名要显示 很遗憾 getColumnMeta没有像我发现的其他示例中那样返回任何数据 有谁知道如何让 getColum
  • Ruby IMAP IDLE 并发 - 如何解决?

    我正在尝试构建一个 目前是私有的 Web 应用程序 该应用程序将利用 IMAP IDLE 连接在人们到达时显示电子邮件 我很难弄清楚如何将其组合在一起 以及它如何与我的 Heroku RoR 服务器结合在一起 我编写了一个用于连接到 IMA
  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • Heroku 自定义域:sni_endpoint?

    当向我的 Heroku 应用程序添加自定义域时 我遇到了以下错误 结果 Heroku 添加了一个新要求 Beginning November 1 2021 this new parameter will be required sni en
  • Rails 4.0 expire_fragment/缓存过期不起作用

    我一直在尝试使用 Rails 的缓存功能 但我无法使某些缓存片段过期 尽管它们似乎已过期 使用 Rails 教程网站中指出的 Russian Doll Caching 我正在使用此配置 我使release controller rb 控制器
  • 覆盖 Rails ActiveRecord 销毁行为的最佳方法是什么?

    我有一个应用程序 我想在其中覆盖许多模型的销毁行为 用例是用户可能有删除特定记录的合法需要 但实际上从数据库中删除该行会破坏引用完整性 从而影响其他相关模型 例如 系统的用户可能想要删除不再与其有业务往来的客户 但需要维护与该客户的交易 看
  • 如何使用符号来标识 ruby​​ 方法中的参数

    我正在学习 Rails 并回到 ruby 来了解 Rails 中的方法 以及 ruby 的实际工作原理 当我看到如下方法调用时 validates first name presence gt true 我有点迷惑不解了 如何在 ruby
  • 我可以在 git 中使用单个命令推送到多个存储库吗?

    基本上我想做一些类似的事情git push mybranch to repo1 repo2 repo3 现在我只是多次输入push 如果我急于完成push 我只需将它们全部发送到后台git push repo1 git push repo2
  • 安装文件失败调试已启用

    我之前使用过安装项目 没有任何问题 该项目没有 SQLite DB 作为依赖项我现在正在尝试为一个包含 SQLite 作为 System Data SQLite Core 的项目制作一个 EXE 或 msi 文件 该项目是一个带有 WPF
  • 在 Ruby 中从一个数组减去另一个数组

    我有两个任务数组 创建和分配 我想从创建的任务数组中删除所有分配的任务 这是我的工作代码 但很混乱 assigned tasks user assigned tasks created tasks user created tasks Do
  • 如何在gitlab存储库中下载单个文件夹或文件

    我有一个存储库 在此存储库中 有多个文件夹可用 我只需要此存储库中的一个文件夹 我已经尝试遵循命令 但它不起作用 克隆 有没有办法只克隆 git 存储库子目录 https stackoverflow com questions 600079
  • 使用 Assetic PHP 通过 RVM 安装后 Sass 损坏

    我正在尝试设置 Assetic PHP 资源编译器 并且它可以与 CoffeeScript Stylus 和 Less 一起使用 所有 NPM 包都运行良好 然而 对于 Sass 我遇到了问题 以下是我到目前为止所采取的步骤 我安装了 RV
  • Codekit文件权限问题(只读文件系统@dir_s_mkdir - /.sass-cache)

    出现以下错误 Compiling failed with this error Errno EROFS on line 239 of System Library Frameworks Ruby framework Versions 2 6
  • 如何将 rubocop 与 Rake 集成?

    rubocop https github com bbatsov rubocop是 Ruby 的代码风格检查器 与 rubocop 类似的工具 Cane 可以与 Rake 集成 https github com square cane in
  • 恢复后如何挑选提交?

    我正在研究我的feature branch并在审核后合并到development待部署 后来 一位同事决定发布一个版本 并将他和我的合并到master 在部署时 他意识到他的代码有错误并恢复了master 在我们的分叉和拉动流程中 这意味着

随机推荐