私は最初のRubyプロジェクトに取り組んでおり、ファイルを別のディレクトリに整理しようとしているときに、.rbファイルにRuby以外のファイル(.txtファイルなど)をローカルにロードさせる際に問題が発生しました。 。
たとえば、プロジェクトの構造が次のようになっているとします。
myproject/
bin/
runner.rb
lib/
foo.rb
fooinfo.txt
test/
testfoo.rb
また、ファイルの内容は次のとおりです。
runner.rb
require_relative '../lib/foo.rb'
foo.rb
File.open('./fooinfo.txt') do |file|
while line = file.gets
puts line
end
end
libにcdしてfoo.rbを実行すると、独自のディレクトリでfooinfo.txtを見つけて、その内容を出力するのに問題はありません。ただし、binにcdしてrunner.rbを実行すると、次のようになります。
in `initialize': No such file or directory - ./fooinfo.txt (Errno::ENOENT)
これは、File.openが、最上位プログラムが実行されているディレクトリを基準にして検索するためだと思います。foo.rbが実行/要求される場所に関係なくfooinfo.rbを確実に見つける方法はありますか(foo.rbとfooinfo.rbが常に相互に同じ場所を維持していると仮定します)?bin / runner.rbからfoo.rbを実行し、test /にテストファイルを実行して、どちらの場合もfooinfo.txtを見つけられるようにしたいと思います。
理想的には、myprojectディレクトリ全体が移動された場合でも機能するソリューションが必要です。
非rubyファイルを見つけることができるrequire_relativeのようなものはありますか?