ruby-on-rails - Rails 3应用服务器启动时间很长

标签 ruby-on-rails ruby-on-rails-3 bundler

更新2这是Ruby 1.9.2加载文件的方式的已知错误/功能。 http://twitter.com/#!/rails/status/72801149769621504

更新:这最初是一个问题,但经过一番努力后,我认为它可能无法修复。我以为我可以发布此信息,以防其他人看到相同的东西,并且想知道滑轨和捆扎机内部发生了什么。

还有其他人在他们的Rails 3应用程序中看到较长的加载时间吗?我将计时器放在environment.rb,application.rb,boot.rb和railties / lib / rails / initializable.rb中。时间以秒为单位,经过时间是自上次记录时间以来的时间。生产加载时间需要更长的时间。部分原因是硬件较少,也来自eager_load! (也许来自Thin vs Mongrel)。看来Bundler占用了很大的加载时间,我想这是可以预期的。我在开发和生产中测试了其中一个应用,在开发中测试了一个空白应用。我测试了2个应用服务器,只是看它是否是Thin引起的。我在产品中也看到了与Passenger相似的情况(这使得2.2.15中的生成行为无法使用b / c)。我在Edge Rails上进行了测试,开发人员的性能从14.5s到14.2s稍差一些。如果删除测试依赖项,则可以节省2-3秒,但这对运行测试没有帮助。我想等待5分钟让所有Thin实例重新启动以及等待15秒才能进行测试只是有点烦人,但是由于我在Rails 3上获得了生产力,因此这是一个可以接受的折衷方案。加快速度的想法,我无所不能。测试结果如下:

注意:我在Rails 2.3中的应用程序在开发中加载的时间不到3秒(尽管自从移至rails3以来,我已将一些代码转换为引擎并添加了haml和twitter_oauth gem)

**所有使用Rails 3RC和Ruby 1.9.2rc2进行的测试

带有Thin的产品-CentOS 5.5,Rackspace云服务器2GB实例
测试具有24个gem依赖项的App#1

开始env.rb-总计= 0
start app.rb-已使用0.00110546总计= 0.001180052
启动boot.rb-经过0.000600488。总计= 0.00178644
end boot.rb-过去了0.7935529总计= 0.795507318
开始要求滑轨/全部-过去0.000189127。总计= 0.795701199
最终需要滑轨/全部-过去了1.086998364。总计= 1.882735263
启动Bundler要求-过去0.000109708。总计= 1.88285043
最终Bundler要求-已过去8.955853243。总计= 10.838746673
结束app.rb-经过0.062975913总计= 10.901753753
#/railties-3.0.0.rc/lib/rails/initializable.rb
开始运行初始化程序-过去0.000145906。总计= 10.901910186
load_environment_config-已过去0.116689774。总计= 11.018632298
initialize_cache-经过0.246161343。总计= 11.320543397
active_record.initialize_database-已过去0.080047485。总计= 11.400961893
bootstrap_hook-已过去1.034189984。总计= 12.451309104
active_support.initialize_time_zone-已过去1.969821814。总计= 14.448777651
action_controller.set_configs-已过去0.594991537总计= 15.044692126
will_paginate.active_record-过去了0.324460921。总计= 15.386837641
will_paginate.action_view-已经过去1.904889132。总计= 17.328981523
add_view_paths-已使用0.087811847。总计= 17.42011881
load_init_rb-经过0.151282681。总计= 17.709093173
load_init_rb-过去0.362241273。总计= 18.071865548
load_config_initializers-已过去0.144051305。总计= 18.217433492
build_middleware_stack-已花费2.569453884。总计= 20.826842081
eager_load! -过去了4.165919064。总计= 24.99280168
finisher_hook-已过去0.48795935。总计= 25.480807439
repopulate_roles-经过0.504085662。总计= 25.984901297
最终运行初始化程序-过去了〜0.00005。总计= 25.985617783
end env.rb-过去了〜0.00006。总计= 25.985683903


带Mongrel的开发人员-Max OSX 10.5.8、2.66 Core2duo,4GB RAM
测试具有24个gem依赖项的App#1

启动boot.rb(Bundler.setup)-经过2.0e-05。总计= 3.1e-05
结束boot.rb(Bundler.setup)-经过2.352435总计= 2.352915
start app.rb-过去0.084945。总计= 2.437866
开始要求滑轨/全部-过去0.000181。总计= 2.438049
最终需要滑轨/全部-过去了0.489425。总计= 2.927485
start Bundler.require(:default,Rails.env)-过去了5.6e-05。总计= 2.927544
end Bundler.require(:default,Rails.env)-过去了5.16162。总计= 8.089177
结束app.rb-经过0.025972。总计= 8.11516
启动env.rb-已花费0.084153。总计= 8.199329
#/railties-3.0.0.rc/lib/rails/initializable.rb
start run_initializers-已过去0.002709。总计= 8.202042
initialize_cache-经过0.089231。总计= 8.518005
bootstrap_hook-已过去0.602342。总计= 9.192564
active_support.initialize_time_zone-已过去0.901676。总计= 10.10115
action_controller.set_configs-已使用0.375864。总计= 10.477565
will_paginate.active_record-已过去0.207447。总计= 10.694479
will_paginate.action_view-已经过1.041412。总计= 11.75974
load_init_rb-已过去0.051938。总计= 11.879547
load_init_rb-已过去0.082936。总计= 12.001311
load_init_rb-已过去0.18798。总计= 12.189555
load_config_initializers-已过去0.079461。总计= 12.269971
build_middleware_stack-已使用1.390042。总计= 13.729273
finisher_hook-已花费0.082274。总计= 13.811648
repopulate_roles-已过去0.350287。总计= 14.161941
结束run_initializers-已过3.0e-06。总计= 14.177869
结束env.rb-已过去0.000127。总计= 14.178002


Dev与Mongrel
测试具有2个gem依赖项的App#2

启动boot.rb(Bundler.setup)-总计= 0
结束boot.rb(Bundler.setup)-经过1.724158总计= 1.724199
start app.rb-已花费0.041006。总计= 1.765211
开始需要导轨-过去0.000151。总计= 1.765364
末端需要导轨-过去0.360051。总计= 2.125426
启动Bundler.require(:default,Rails.env)-过去5.5e-05。总计= 2.125485
end Bundler.require(:default,Rails.env)-已使用0.008396总计= 2.133889
结束app.rb-经过0.007805。总计= 2.141704
start env.rb-已过去0.16541。总计= 2.307128
start run_initializers-过去了0.00031。总计= 2.307442
load_active_support-经过0.24045。总计= 2.579421
active_support.initialize_time_zone-已过去0.206237。总计= 2.837663
action_controller.deprecated_routes-经过0.210291。总计= 3.048634
build_middleware_stack-过去了0.220663总计= 3.273035
结束run_initializers-已过3.0e-06。总计= 3.29339
结束env.rb-过去8.7e-05。总计= 3.293483

最佳答案

既然这是一个相当老的问题:您是否在Rails 3的发行版中对其进行了测试?

那是很长一段时间,但最终毫无意义。我的Rails应用程序一次只能运行几个月,因此只占总运行时间的1%的一小部分。

Bundler是否需要处理大量依赖项?在任何环境下,我都可以在不到2秒的时间内启动Rails 3应用程序,但是我很少使用第三方gem。

关于ruby-on-rails - Rails 3应用服务器启动时间很长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3503175/

相关文章:

javascript - Webpack 样式加载器和 css 加载器

ruby-on-rails - Rails-迁移-change_column_default

ruby-on-rails - rails 3 : Detecting types when parsing XML

ruby-on-rails - 为什么我在使用 `acts_as_taggable_on` 时会收到这个简单的错误?

database - 导轨 3 : Updating Database Data

Heroku 包因 Gem::RemoteFetcher::FetchError 失败:错误响应后端读取错误 503

ruby-on-rails - Rails 生产 : Bundle is locked to rake

ruby-on-rails - Ruby 重构包括?接受多个字符串

ruby-on-rails - 何时在连接表上设置没有主键的表

ruby-on-rails - Rails 控制台有时会发疯