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

如何在Roda项目中让Zeitwerk仅自动加载指定单个文件

解决方案

有两种简洁的方案可以实现你的需求,无需移动config/application.rb文件:

方案一:使用push_dir的matcher参数(推荐)

Zeitwerk的push_dir方法支持matcher选项,通过正则表达式指定只加载目录下符合规则的文件。直接给config目录设置仅匹配application.rb的规则即可:

loader = Zeitwerk::Loader.new
loader.push_dir('lib')
# 仅加载config目录下的application.rb文件
loader.push_dir('config', matcher: /application\.rb$/)

if ENV['RACK_ENV'] == 'development'
  loader.enable_reloading
  loader.setup
  run ->(env) do
    loader.reload
    Application.call(env)
  end
else
  loader.setup
  loader.eager_load
  run Application.freeze.app
end

原理:matcher参数会让Zeitwerk扫描config目录时,只处理匹配正则表达式/application\.rb$/的文件,自动忽略其他所有文件。

方案二:通过ignore排除指定文件

如果偏好显式排除的方式,可以先将整个config目录加入加载路径,再排除除application.rb外的所有.rb文件:

loader = Zeitwerk::Loader.new
loader.push_dir('lib')
loader.push_dir('config')

# 排除config目录下所有非application.rb的rb文件
loader.ignore(*Dir.glob("config/*.rb").reject { |path| path == "config/application.rb" })

if ENV['RACK_ENV'] == 'development'
  loader.enable_reloading
  loader.setup
  run ->(env) do
    loader.reload
    Application.call(env)
  end
else
  loader.setup
  loader.eager_load
  run Application.freeze.app
end

原理:利用Dir.glob获取config目录下所有.rb文件,再通过reject筛选出需要保留的application.rb,剩下的文件全部传给loader.ignore排除。

两种方案都能实现你的需求,方案一更简洁高效,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27