2012-02-23 29 views
40

Trong dự án Ruby của tôi, tôi đang sử dụng một số thứ như di chuyển và chỉnh sửa các tập tin trên một số hộp điều khiển từ xa và thực sự cần một đường dẫn tương đối vào thư mục gốc của dự án. Tôi có nhiều thư mục xử lý được sử dụng trong nhiều phương pháp.Đường dẫn tương đối vào thư mục dự án của bạn

Ngay bây giờ tôi có đường dẫn mã hóa cứng, nhưng điều đó khiến tôi không hài lòng.

Trả lời

73

Bạn có thể nhận được thư mục hiện hành (thư mục của tập tin hiện hành) với điều này

File.dirname(__FILE__) 

Sau đó bạn có thể tham gia nó với đường dẫn tương đối đến thư mục gốc

File.join(File.dirname(__FILE__), '../../') # add proper number of .. 

Hoặc bạn có thể sử dụng expand_path để chuyển đổi tương đối đường dẫn đến tuyệt đối.

ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', File.dirname(__FILE__)) 

Hoặc bạn có thể tính toán đường dẫn tương đối giữa hai dirs.

require 'pathname'; 
puts Pathname.new('/').relative_path_from(Pathname.new('/some/child/dir/')).to_s 
# => ../../.. 
+0

Cảm ơn SERG, hãy để tôi refrase – qwebek

+0

Vì vậy, những gì chính xác là vấn đề của bạn? –

+1

Vấn đề nhất định tôi phải đối mặt là sau - FileUtils.chdir ("\\\\ someRemoteIp \\ somedir") FileUtils.cp (filename, "local_box_drive \\ thư mục") sau đó tôi cần phải trích xuất một số dữ liệu từ các tệp nằm trong thư mục gốc của dự án tôi phải làm FileUtils.chdir ("E: \\ thư mục \\ thư mục \\ my_project_folder") my_method (local_file_in_root_project_folder) Nếu tôi sẽ chạy mã như trên một số hộp khác, nó sẽ thất bại, tôi cần FileUtils.chdir ("E: \\ thư mục \\ thư mục \\ my_project_folder") thay thế cho một số biểu thức tương đối sẽ đưa tôi đến thư mục gốc của dự án của tôi – qwebek

12
__dir__ 

Kể từ Ruby 2, bạn chỉ có thể sử dụng Kernel chức năng :__dir__ để có được tuyệt đối thư mục-đường dẫn của file hiện hành. Vì vậy, để đưa ra một ví dụ, bạn có thể đặt ROOT_DIR không đổi ở đầu dự án của bạn trong (config.rb, environment.rb, constants.rb, hoặc bất cứ điều gì bạn gọi nó).

Xem Ruby Documentation

Các vấn đề liên quan