以下のように特定のディレクトリ配下のファイルを雑に require
することがあるとする。
Dir.glob('./lib/**/*.rb').each {|f| require f }
これだと読み込み順が一定でないので、場合によっては A というクラスが依存している B というクラスを読み込む前に参照しようとして NameError
にったりする。
# a.rb
class A < B
end
# b.rb
class B
end
もちろん、これは a.rb
の先頭で require 'b.rb'
すればいい話ではある。
だが問題は、テスト中はたまたま問題なくいっていたものが本番で急にエラーになったりすることである。
そのため事前に sort
しておくと良い。
Dir.glob('./lib/**/*.rb').each.sort {|f| require f }
これならファイルの読み込み順序は一定になる、はず。 (OS やファイルシステムによって違う可能性もあり得る?)