You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails应用v3升级v4后服务器启动极慢 资产预加载耗时过长排查

Rails 4 升级后启动阶段资产预加载耗时过长解决方案

问题根因

你看到的10步资产预加载日志,是Rails 4 对Sprockets资产管道的默认逻辑改动导致的:Rails 3 采用资产懒加载,只有第一次请求对应资产时才会做解析编译,不会在启动阶段处理资产;Rails 4 新增了启动时全量资产预扫描逻辑,会遍历所有资产搜索路径下的文件,提前构建依赖树和编译缓存,这个步骤的耗时和你资产目录的文件总量直接挂钩。

你之前调整的config.assets.debug/config.assets.compress/config.assets.digest这类配置,只影响资产编译后的输出结果,完全不涉及启动阶段的预加载扫描逻辑,所以调整这些配置不会解决问题。

直接修复方案

打开开发环境配置文件config/environments/development.rb,追加以下配置:

# 关闭启动阶段全量资产预加载,改回Rails 3的请求时懒加载逻辑
config.assets.configure do |env|
  if Rails.env.development?
    env.check_precompiled_assets = false
  end
end

# 限制开发环境预编译资产范围,避免全量扫描所有文件
config.assets.precompile += %w( application.js application.css )

配置完成后重启服务,preloading assets相关日志会直接消失,启动耗时会回落到1分钟以内的水平。

额外排查点

如果加完配置启动还是慢,检查资产搜索路径是否包含了非预期的大目录:

  • 如果你在项目中引入了npm包,node_modules目录如果被加入资产搜索路径,会导致扫描文件量暴涨
  • 检查是否有软链接把项目外的大目录链到了app/assets/lib/assets/vendor/assets目录下

如果存在上述情况,在配置中把无效路径从资产搜索路径里剔除即可:

# 排除不需要扫描的目录
config.assets.paths = config.assets.paths.reject do |path|
  path.include?('node_modules') || path.include?('tmp/cache')
end

内容的提问来源于stack exchange,提问作者RGog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:45:47