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

时间:2015-05-11 11:55:05

标签: ruby-on-rails ruby git ruby-on-rails-4 heroku

我在应用程序中更改了一些文本,并使用

部署新版本

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 e gitignore忽略)总大小只有198 KB。

为什么这一切?

2 个答案:

答案 0 :(得分:3)

可以采取一些步骤来减小弹头的大小。

清除构建缓存

Buildpacks缓存一些内容以加快将来的构建速度。但是有时候,当您的依存关系发生变化时(尤其是当您删除依存关系时),可能不会从缓存中将其删除。因此,如果您遇到的子弹大小异常大,并且已经从项目中删除了一些依赖项,请首先尝试执行此操作(如果可以在下一次部署中使用较慢的构建)。

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

使用.slugignore忽略文件

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

*.psd
/doc
/test

要查看文件中有哪些文件,您还可以输入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 buildpack。该文件的格式与.gitignore或.sligignore相同,因此只需从最终文件中列出要忽略的目录,它们就会被删除。确保buildpack的一件事是,它应该是顺序中的最后一个,否则它将在您实际的buildpack运行之前删除文件。

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

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

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

Here is the detailed post解决了同一问题。

答案 1 :(得分:1)

这很可能是由于构建缓存。为了加快构建过程,Heroku会下载依赖项,随着时间的推移,它会被构建起来。

使用他们的repo插件清除构建缓存,然后重新部署。你会看到slu cm尺寸降低了。

https://github.com/heroku/heroku-repo

以下是有关其构建缓存的更多信息:https://devcenter.heroku.com/articles/git#build-cache