The reason it doesn't work is because the control is not given back to EventMachine after each chunk is returned. So basically what happens is that each chunk of the body is buffered by EventMachine because the event loop doesn't have a chance to send the data between each Enumerator yield.
Thin 的作者这样回复的...
背景:bug report: grack 有内存泄漏,clone 5G 的 repo 会消耗 5G 内存。
然后:我发现一个类似的 bug report 在我 fork 出来的 repo 里也出现了。
再然后:我开始怀疑是真的内存泄漏,所以做了一个测试: 最终发现内存稳定在一个恒定值,而不是无限的增长。在测试中我用到了上面的方法。
再然后:昨天晚上,@luikore google 到说 thin 跟 webrick 会 cache response, 然后我们俩就开了局 LOL ..
今天:顺藤摸瓜,发现在了确实是有这么个情况。
我推荐一篇神文章,也是查找 memory leak 的,不过更多的是在 C 层面:http://blog.nelhage.com/2013/03/tracking-an-eventmachine-leak/
这个评论也是我看完后的想法:
Very nice write up. It reads like a mystery novel. I kept trying to guess whodunit.
#33 楼 @edokeh 另外插件如果都是 Fork + Patch 的模式的话,会跟 Rails 现在 gem 加载 javascript 陷入同一个困境,更新跟不上..
模块化方案大家貌似还是在等 ES6. 但现阶段来看,require.js 貌似已经领先了,很多应用默认支持 require.js.
另一个较为成功的库 analytics.js 默认支持 component.
还是希望标准早日落地吧..
#30 楼 @edokeh 无论是 sea.js 还是 require.js, define 都实在是太丑了..
纯的 CommonJS 解决方案也有一些是不用写 define 的,但是会多一个 build 的过程,自动加 define 给你,这样就可以跟 node 一样只需要 require 就可以了。( component && browerify
sea.js 跟 require.js 的 sync load 基本属于伪命题,大家都还是需要用 r.js 与 spm.js 事先压缩,或者通过 nginx 等 hack 方式加载所必须的文件 ( 是不是值得,是值得商榷的,因为损失了 cache 特性。
压缩合并为整个文件/或几个小文件 ( 权衡 cache 与 性能 ) 是现阶段唯一好使的做法。
同时,这类产品都有一个问题。就是 module 缺乏,需要有额外的代码来支持才能使用。shim 是一个方案,但是不够平滑.. .. 问题多多..
说明你的 key 没有被加入 authorizedkeys 里面。
去检查一下 Git 用户的 ~/.ssh/authorizedKeys 列表。
第一个问题是 Chef / Puppet 的作用范畴,配置文件由这种工具统一处理。
第二个问题是 JS Component 的问题,建议用前端模块加载器解决。试试 bower, 推荐 component/component
这些跟 Git 没什么本质的联系。
#6 楼 @mmap 这个还真没碰到过这种情况了.. 问题就在 Gitolite 上,但是不知道怎么解决.. Sorry..
https://github.com/gitlabhq/gitlabhq/wiki/From-4.2-to-5.0 往 5.0 升级吧.. 平生最恨的就是 gitolite 了。
#4 楼 @mmap https://github.com/gitlabhq/gitlabhq/blob/4-2-stable/doc/install/installation.md#test-if-everything-works-so-far
先试试在这里是不是就需要加 repositories. 如果是的话检查一下自己的 Gitolite .
Gitlab 的 gitolite 是我 patch 过的,如果你使用的是官方的版本,可能会导致 update hook 有问题。
其实已经 push 成功了,但是运行 gitolite 的 hook 失败了。
你可以看一下 Repo 内的 hook, 是否存在 gitolite 的 update hook. 再一个可以看一下你的 gitolite 安装的位置,有可能 update hook 没有找到 gitolite 的 home.
必须支持穆里尼奥..
#38 楼 @williamherry headquarters 总部