为什么 Dir.glob return 是 Rails 应用程序模板中的空数组?
Why does Dir.glob return an empty array in a Rails app template?
我正在使用一个 .remove
文件实现自定义 Rails app template,该文件列出了要在 bundle install
完成后删除的文件(例如 app/**/*.erb
)的 glob 样式模式:
removals = File.readlines('/path/to/.remove')
cwd = Dir.getwd
after_bundle do
# Process removals
removals.each do |pattern|
puts 'glob:'+cwd+'/'+pattern # glob:/Users/acobster/starfruit/app/**/*.erb
puts Dir.glob(cwd+'/'+pattern).count # 0
puts `tree #{cwd}/app` # all files in the app tree,
# including several .erb files
Dir.glob(cwd+'/'+pattern).each do |filepath|
puts " removing #{filepath}"
remove_file(filepath)
end
end
end
根据调试代码(见上面的注释),我要删除的文件(在本例中是 app/ 树下的所有 .erb 文件)都在树中,但相当于 Dir.glob('/Users/acobster/starfruit/app/**/*.erb')
正在返回一个空数组。
更奇怪的是,当我从 irb
运行 Dir.glob('/Users/acobster/starfruit/app/**/*.erb')
时,它正确 returns 包含三个 .erb 文件的数组。
怎么回事?
原来我只是忘记从 glob 模式中删除换行符。我把第一行改成了
removals = File.readlines('/path/to/.remove').map(&:strip).reject(&:empty?)
我正在使用一个 .remove
文件实现自定义 Rails app template,该文件列出了要在 bundle install
完成后删除的文件(例如 app/**/*.erb
)的 glob 样式模式:
removals = File.readlines('/path/to/.remove')
cwd = Dir.getwd
after_bundle do
# Process removals
removals.each do |pattern|
puts 'glob:'+cwd+'/'+pattern # glob:/Users/acobster/starfruit/app/**/*.erb
puts Dir.glob(cwd+'/'+pattern).count # 0
puts `tree #{cwd}/app` # all files in the app tree,
# including several .erb files
Dir.glob(cwd+'/'+pattern).each do |filepath|
puts " removing #{filepath}"
remove_file(filepath)
end
end
end
根据调试代码(见上面的注释),我要删除的文件(在本例中是 app/ 树下的所有 .erb 文件)都在树中,但相当于 Dir.glob('/Users/acobster/starfruit/app/**/*.erb')
正在返回一个空数组。
更奇怪的是,当我从 irb
运行 Dir.glob('/Users/acobster/starfruit/app/**/*.erb')
时,它正确 returns 包含三个 .erb 文件的数组。
怎么回事?
原来我只是忘记从 glob 模式中删除换行符。我把第一行改成了
removals = File.readlines('/path/to/.remove').map(&:strip).reject(&:empty?)