一时兴起,我尝试创建一个新的Heroku应用程序并为其部署相同的git存储库.罗,它看得远远低于(仅80mb对208mb).当访问bash并检查每台服务器上的大小时,我注意到服务器之间存在一些差异:
du -hs * 130M (old) vs 1.4M (new) public 23M (old) vs 5.3M (new) tmp ...
是什么赋予了?在Heroku上,用户是否希望在足够的部署通过后销毁并重新创建应用程序?我查看了公共目录,它保留了各种旧的删除资产和垃圾.如何清除我现有的应用程序而不破坏它并从头开始?
解决方法
%> rake assets:precompile # To build new assets %> rake assets:clean # Remove old assets
Rails keeps 2 previous versions的资产(默认情况下).根据应用程序,您可能需要一段时间的旧资产.例如,如果您有一个繁重的JavaScript应用程序一次获取资源,那么通过XHR动态更新.在客户端中运行的旧代码可以引用其他旧资源.即使使用非客户端繁重的应用程序,您可能需要几秒钟,其中一些节点指的是旧资产,而另一些节点指的是新资产.
这可以解释您的旧应用程序中公众规模较大的一些原因.它基本上有三个版本的所有资产,而新部署只有一个版本.听起来好像必须弄乱你的构建环境,因为即使你的新应用程序中所有资产占用1.4MB,这个大小的三倍应该只有5MB而不是旧应用程序中的130MB.
除了有三个版本的资产外,tmp目录中还有一些累积.资产编译过程会在tmp目录中缓存一些信息. Rails有一个rake tmp:cache:clear,你可以定期运行git摆脱那里的cruft.
Heroku automatically runs rake assets:clean
.所以这应该只保留三个版本的资产.但Heroku实际上并没有运行rake tmp:cache:clear.相反,他们have some custom code删除缓存文件,直到缓存的数据低于50MB.我假设他们这样做是为了保留尽可能多的缓存信息,同时仍然限制事物.保留尽可能多的缓存数据可能会确保资产编译快速运行.这意味着您的tmp目录将继续增长,直到达到50MB.
如果您的tmp目录中的公共/资产目录增长超过3个版本或50MB,则创建新应用程序是一个很好的方法来清除问题.你也可以create a custom slug.只是运行rake资产:清理或rake tmp:cache:在heroku控制台上清除不起作用.这只会清理dyno上的东西而不是你的slu ..因此,当创建新的dyno时,您的清洁将被丢弃.