在ruby中从一个目录中获取所有文件的最好方法是什么?
当前回答
在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}
而不是像在一些答案连接路径,我使用File.expand_path:
Dir[File.expand_path('importers/*.rb', File.dirname(__FILE__))].each do |file|
require file
end
更新:
而不是使用文件。Dirname你可以这样做:
Dir[File.expand_path('../importers/*.rb', __FILE__)].each do |file|
require file
end
在哪里. .删除__FILE__的文件名。
Dir.glob(File.join('path', '**', '*.rb'), &method(:require))
或者,如果你想要将文件加载到特定的文件夹:
Dir.glob(File.join('path', '{folder1,folder2}', '**', '*.rb'), &method(:require))
解释:
Dir。Glob以block作为参数。
方法(:require)将返回require方法。
&method(:require)将方法转换为块。
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”是相同的文件)。两次要求相同的文件可能会导致错误的警告(例如。"警告:已初始化的常量")。
推荐文章
- 是否可以在MiniTest中运行单个测试?
- 如何在Ruby中生成a和b之间的随机数?
- 如何在Python中获得所有直接子目录
- 即使模板文件存在,Flask也会引发TemplateNotFound错误
- 无法安装gem -未能建立gem本地扩展-无法加载这样的文件——mkmf (LoadError)
- 如何复制在bash所有目录和文件递归?
- 如何在Ruby中创建文件
- 什么是Ruby文件。开放模式和选项?
- Ruby数组到字符串的转换
- 如何分割(块)一个Ruby数组成X元素的部分?
- Ruby中“or”和||的区别?
- __FILE__宏显示完整路径
- 如何测试参数是否存在在轨道
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- RVM不是一个函数,用' RVM use…’不会起作用