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

如何在ROR中排除lib目录下特定文件不进行eager_loading

Rails lib目录指定文件排除预加载的解决方案

方法1:使用config.eager_load_exclusions(Rails 6+)

这是最直接的方式,Rails 6及以上版本提供了专门的排除配置:

# config/application.rb
config.eager_load_paths += [Rails.root.join('lib')]
# 排除目标文件
config.eager_load_exclusions += [Rails.root.join('lib', 'iq_analytics.rb')]
config.eager_load = true

该配置会让Rails预加载lib目录下所有文件,仅跳过iq_analytics.rb。

方法2:手动筛选预加载文件(兼容全版本)

如果你的Rails版本低于6,没有eager_load_exclusions,可以手动控制预加载的文件范围:

# config/application.rb
config.eager_load_paths += [Rails.root.join('lib')]

Rails.application.config.after_initialize do
  if Rails.application.config.eager_load
    # 遍历lib下所有rb文件,排除目标文件后加载
    Dir.glob(Rails.root.join('lib', '*.rb')).each do |file|
      require_dependency(file) unless file.end_with?('iq_analytics.rb')
    end
  end
end

如果lib目录下有子目录,需要把*.rb改成**/*.rb来递归匹配所有文件。

关于你之前配置失效的原因

config.eager_load_paths存储的是目录路径,而非单个文件路径。你之前尝试减去单个文件的路径,由于和已添加的lib目录路径不匹配,所以无法达到排除单个文件的效果,反而可能因配置逻辑问题导致整个lib目录未被正确预加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:25:01