我一直在处理我的第一个 Ruby 项目,在尝试将我的文件组织到不同目录的过程中,我遇到了让 .rb 文件加载自己本地的非 ruby 文件(例如 .txt 文件)的问题.
例如,假设一个项目具有以下结构:
myproject/
bin/
runner.rb
lib/
foo.rb
fooinfo.txt
test/
testfoo.rb
文件内容如下:
跑步者.rb
require_relative '../lib/foo.rb'
foo.rb
File.open('./fooinfo.txt') do |file|
while line = file.gets
puts line
end
end
如果我 cd 到 lib 并运行 foo.rb,它可以轻松地在自己的目录中找到 fooinfo.txt 并打印其内容。但是,如果我 cd 到 bin 并运行 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 目录也能工作的解决方案。
是否有类似 require_relative 的东西可以找到非 ruby 文件?