Rails在Ruby 1.9.1上初始化非常缓慢。

20

我刚刚将我的Rails 2.3.8应用程序运行在Ruby 1.9.1上。要进入控制台,启动Web服务器或任何初始化Rails的操作,在Ruby 1.9中比在Ruby 1.8.7中慢3-4倍。我使用Ruby版本管理器,所以可以轻松地在Ruby 1.9和Ruby 1.8.7之间切换。速度差异发生在开发和生产环境下。我想使用1.9,因为一旦一切都运行起来,它比较快,但启动时间太长了,导致Heroku在第一个请求时超时。

有任何想法是为什么Ruby 1.9会变得慢3-4倍?我自己实在想不出原因。


或者找出它花费时间的地方。 - Ben Johnson
我已经确认在一个新的Rails应用程序中存在这个问题。因此,它绝对不是一个gem或特定于应用程序的东西。 - Ben Johnson
当你说比较慢3-4倍时,需要多长时间(秒)?如果Ruby1.9需要3秒而Ruby1.8只需要1秒,那么你可能遇到的问题与Ruby1.9需要60秒而Ruby1.8需要20秒时不同! - nfm
我也注意到我的应用程序在第一次请求时有大约2秒的延迟,但我不认为这会导致超时。这可能与Rails库中的“autoload”与“require”有关。当访问相关常量时,“autoload”仅加载给定文件,因此它基本上是惰性加载。如果进行了大量的惰性加载,那么可能会出现问题。如果只是第一个请求需要很长时间,那么这可能真的是问题所在。否则,请忽略我的建议。 - Twisol
这个问题也会在本地发生吗? - Shyam
切换到rails3/ruby19后,平均的rails环境加载时间约为30秒,而在rails2/ruby18上只需5秒。我现在正在尝试使用1.9.2-head来查看是否有任何改进。 - knoopx
2个回答

6
尝试使用1.9.2-head版本代替1.9.1。这是Rails 3的推荐版本,所以你可能会有更好的运气。从我刚刚在本地运行的测试中可以看出,Rails 2.3.8在1.9.2-head上启动非常快(顺便提一下,我也安装了Authlogic)。
如果你正在使用RVM,请输入以下内容:
rvm install 1.9.2-head
rvm use 1.9.2-head

编辑:我尝试了1.9.1 p378版本的同一款应用程序,启动时间约为13秒,而在1.9.2-head上只需5秒。我相信1.9.2-rc1将在本月发布 我相信,这是个好消息 :)

0

这可能是因为 Ruby 1.9 使用 gem_prelude(它提供了一个较大的加载路径)而不是普通的 rubygems。请检查 $: 的长度 - 每个 require 都会搜索一次,导致额外的时间。

如果你想要旧的方式,(升级到最新版本的 rubygems 并)运行 ruby --disable-gems。

如果你在 Windows 上,请看看我的 faster_require gem。

http://github.com/rdp/faster_require

虽然我想,既然你提到了,它可能会在1.9 Linux中有所帮助。也许。

祝好! -rp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接