Heroku Repo 大小和 Slug 大小随着每次部署而增加。为什么?

2024-01-10

我更改了应用程序中的一些文本并使用以下命令部署新版本

git push heroku master

但每次我推动时,它都会增加很多。我在这里写下每次部署后的增量。

168.2 KB
37.9 MB

178.6 KB
38.7 MB

187 KB
39.4 MB

194 KB
40.2 MB

205.3 KB
40.9 MB

232.8 KB
41.8 MB

277.9 KB
42.4 MB

286.5 KB
43 MB

如果我选择应用程序项目中的所有文件夹(包括 public/、tmp/ 和 log/,我使用 slugignore 和 gitignore 忽略它们),总大小仅为 198 KB。

为什么这一切?


可以采取几个步骤来减小段塞尺寸。

清除构建缓存

Buildpack 会缓存一些内容以加快未来的构建速度。但有时,当您的依赖项发生更改时(特别是当您删除依赖项时),它可能不会从缓存中删除。因此,如果您面临意外的高 slug 大小,并且您已从项目中删除了一些依赖项,请首先尝试此操作(如果您可以忍受下一次部署时的缓慢构建)。

$ heroku plugins:install heroku-repo 
$ heroku repo:purge_cache -a appname

忽略带有 .slugignore 的文件

您的 .sligignore 应列出存储库中的目录和文件(不被 .gitignore 忽略),但应用程序在产品上运行不需要的目录和文件。此类文件的一些示例是测试、文档和设计文件。要从 slug 中删除它们,请在项目的根目录下创建一个 .slugignore。

*.psd
/doc
/test

要查看 slug 中放入了哪些文件,您还可以输入 heroku bash 并检查文件系统。

heroku run bash -a appname  
du -sh .[^.]* * | sort -hr 

节点模块

这部分特定于包含将所有 JavaScript 代码捆绑到单个脚本的资产管道的应用程序。如果您使用的是节点服务器,这可能不适用于您。

如果您将 Rails 与 webpacker 一起使用,则在 node_modules 中可能有很多依赖项。但是在资产管道编译资源之后,您可能不需要 node_modules 目录(除非您在运行时运行使用这些模块的自定义节点脚本)。要在这种情况下删除 node_modules 目录,我们可以使用带有 .slug-post-clean 文件的 heroku-buildpack-post-build-clean 构建包。该文件的格式与 .gitignore 或 .sligignore 相同,因此只需列出您想要从最终 slug 中忽略的目录,它们就会被删除。使用构建包要确保的一件事是,这应该是顺序中的最后一个,否则它将在实际构建包运行之前删除文件。

但是,如果您使用在运行时访问 node_modules 的自定义节点脚本怎么办?在这种情况下,我们要做的就是将这些脚本移动到一个单独的目录,并使用它自己的 package.json 文件。要将依赖项与根 package.json 一起安装到该目录中,请将安装后脚本添加到根 package.json 中。这将指示yarn将目录更改为您的自定义脚本,并在安装根项目的依赖项后在那里安装依赖项。

"scripts": {
  "postinstall": "yarn --cwd lib/custom-node-script"
}

这样,即使在生产 Rails 应用程序中使用自定义节点脚本,您也可以安全地删除根 node_modules 目录。

这是详细的帖子 https://sapandiwakar.in/reducing-heroku-slug-size/解决同一问题。

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

Heroku Repo 大小和 Slug 大小随着每次部署而增加。为什么? 的相关文章

  • 如何使用 rspec 测试条件 ActiveRecord after_update 回调?

    我有一个触发作业的条件回调 如果经理发生变化 则应调用该方法 class Employee lt ActiveRecord Base after update employee manager on change if employee i
  • heroku node.js bash:节点:找不到命令

    在 cedar stack 上的 heroku 上部署我的应用程序似乎存在一个奇怪的问题 我的节点进程甚至没有被调用 我的Proc文件如下 web node web js 和我的 package json 文件 name fuuzik ve
  • git 索引到底包含什么?

    Git 索引到底包含哪些内容 可以使用什么命令查看索引内容 感谢您的所有回答 我知道索引充当暂存区 提交的内容是在索引中而不是工作树中 我只是好奇索引对象由什么组成 我猜它可能是文件名 目录名 SHA 1 对的列表 也许是一种虚拟树 在 G
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • 在 emacs 的文件中不断出现的这些 ^M 是什么?

    我认为这可能与 TextMate 有关 但我们在一个小团队中工作 并且在 git 中几乎相同的文件的全文件冲突方面遇到了一些问题 在一个分支中 文件的每一行都附加了 M 这是什么神秘的事 M角色应该做什么 它从哪里来 我们的开发人员在 Wi
  • 应该使用 Rspec Gem 在 Belong_to 测试中返回“String:Class 的未定义方法‘reflect_on_association’”

    在我的 Rails 应用程序中 我有我的模型Request Service and ServiceRequest 在我的 models rb 文件中 我有 request rb class Request lt ApplicationRec
  • 多租户 Rails 应用:不同技术的优缺点是什么?

    我最初是为一位客户编写 Ruby on Rails 应用程序的 现在 我正在更改它 以便它可以用于不同的客户 我的最终目标是某些用户 不是我 可以单击按钮并创建一个新项目 然后生成所有必要的更改 新架构 新表 代码处理 无需任何人需要我编辑
  • Rails 应用中静态页面的最佳实践

    我正在为当地企业开发一个 ruby on Rails 应用程序 这些页面是 静态 的 但可以通过我为它们构建的后端 CMS 进行更改 是否有为静态页面创建控制器的最佳实践 现在我有一个带有所有静态路由的站点控制器 如下所示 路线 rb ge
  • 我是否需要在裸仓库上运行 git gc ?

    man git gc http www kernel org pub software scm git docs git gc html其中没有明显的答案 而且我在谷歌上也没有任何运气 尽管我可能只是使用了错误的搜索词 我明白你应该偶尔跑步
  • 通过 cron 进行 git 推送

    我正在尝试运行git push来自 cron 当我在 shell 上以交互方式执行命令时 一切顺利 从我的用户的 crontab 运行命令时 cron 会传递错误消息 Permission denied publickey 我认为这与查找或
  • 反向合并具有干净历史记录的缝合功能分支

    我有这个 d0 f1 d1 d2 f2 d3 merge d4 f3 merge
  • 如何在“git-pull”自动合并后更改提交消息?

    有时 当结果生成自动合并时 我的协作者会 惊慌 git pull 然后接受默认的提交消息 在推送此提交之前 我想确保该消息得到修复 但是 amend似乎不起作用 修复这种情况下生成的消息的最佳方法是什么 我能为他们提供的最佳指示是 git
  • 如何使用 Mercurial 将文件夹与现有 Heroku 应用程序链接

    我在 Bitbucket 上有一个现有的 Django 应用程序 我能够部署到 Herokuhg git https stackoverflow com q 9591380 343834 每当我想在应用程序文件夹中运行一些 heroku 命
  • 如何使 Active Record 连接返回唯一的对象?

    我有一个简单的查询需求 查找自2013年1月1日以来下过订单的用户列表 在 SQL 中 这是一个非常简单的查询 但我正在使用 Rails 和 Active Record 所以我写道 User joins orders where order
  • Git 将分支从一个远程推送到另一个远程?

    我设置了以下遥控器 git remote korg rorg 以及以下分支 git branch a no branch remotes korg gingerbread remotes korg gingerbread release r
  • 如果不选择 Updated_at 属性,则无法更新 Rails 4 中的模型

    我正在从 Rails 3 2 13 升级到 4 并遇到更新模型的问题 我正在尝试仅更新模型上的单个属性 其中我只有 id 我还需要验证和回调 这在 Rails 3 中运行良好 但在 Rails 4 中遇到了麻烦 在 Rails 4 中 如果
  • 使用 Ruby 中的 Turn_left 方法更改朝向

    我需要创建一个方法turn left来改变朝向 朝向总是从 南开始 我正在实现一个移动到木板上的机器人 所以如果我调用方法turn left应该将朝向改变为东 然后为北 然后为西 然后返回南方 我在想这样的事情 0 S 1 E 2 N 3
  • 在 Ruby 1.8.7 中将带有二进制数据的 YAML 响应转换为 UTF-8

    我正在从 API 中提取响应并接收 response job unit count 1 slug Answers lc tgt ja body tgt binary 5Zue562U lc src en body src Answers j
  • Unicorn + Rails + 大型上传

    我试图在使用 Rails 在 Heroku 上运行 Unicorn 时允许进行大型上传 但我意识到任何大型上传可能需要比 Unicorn 工作线程的超时时间更长的时间 这意味着 我见过这种情况发生 Unicorn 主进程将杀死上传大文件的工
  • 将 URL 转换为 JSON 版本?

    在我的应用程序的所有页面上 我想要一个指向当前页面的 JSON 版本的链接 有什么巧妙的技巧可以做到这一点吗 当 URL 中包含额外的 参数时 情况就变得复杂了 所以 url 将被转置为 users gt users json users

随机推荐