在ruby中从一个目录中获取所有文件的最好方法是什么?


当前回答

在Rails中,你可以做:

Dir[Rails.root.join('lib', 'ext', '*.rb')].each { |file| require file }

更新:修正了@Jiggneshh Gohel删除斜杠的建议。

其他回答

Dir[File.join(__dir__, "/app/**/*.rb")].each do |file|
  require file
end

这将在您的本地机器和不使用相对路径的远程(如Heroku)上递归地工作。

Dir[File.dirname(__FILE__) + '/../lib/*.rb'].each do |file| 
  require File.basename(file, File.extname(file))
end

如果您不剥离扩展名,那么您可能会需要相同的文件两次(ruby不会意识到“foo”和“foo. exe”。Rb”是相同的文件)。两次要求相同的文件可能会导致错误的警告(例如。"警告:已初始化的常量")。

试试require_all gem:

http://github.com/jarmo/require_all https://rubygems.org/gems/require_all

它让你简单地:

require_all 'path/to/directory'

在Rails中,你可以做:

Dir[Rails.root.join('lib', 'ext', '*.rb')].each { |file| require file }

更新:修正了@Jiggneshh Gohel删除斜杠的建议。

我已经晚了几年,但我有点喜欢这个单行解决方案,我用来让rails包括app/workers/concerns中的所有内容:

目录[Rails.root.join *%w(应用程序worker关注点*)]。每个{|f| require f}