Hãy tưởng tượng bạn có một foo.rb thực thi, với các thư viện bar.rb đặt ra theo cách sau đây:Tìm thư viện tương đối khi sử dụng liên kết tượng trưng đến ruby thực thi
<root>/bin/foo.rb
<root>/lib/bar.rb
Trong phần đầu của foo.rb bạn đặt sau đây yêu cầu phải có chức năng trong bar.rb:
require File.dirname(__FILE__)+"../lib/bar.rb"
Điều này hoạt động tốt miễn là tất cả các cuộc gọi đến foo.rb đều trực tiếp. Nếu bạn đặt $ HOME/project và symlink foo.rb thành $HOME/usr/bin
, thì
giải quyết thành __FILE__
$HOME/usr/bin/foo.rb
và do đó không thể định vị được bar.rb
liên quan đến tên đệm cho foo.rb
.
Tôi nhận thấy rằng các hệ thống đóng gói như rubygems khắc phục điều này bằng cách tạo không gian tên để tìm kiếm thư viện và cũng có thể điều chỉnh load_path bằng cách sử dụng $:
để bao gồm $HOME/project/lib
, nhưng dường như giải pháp đơn giản hơn hiện hữu. Có ai có kinh nghiệm với vấn đề này và tìm thấy một giải pháp hay công thức hữu ích?
Điều đó chắc chắn tốt hơn, ít nhất nó chỉ là hai dòng. Vẫn không may là không có một giải pháp duy nhất. – dgtized