Jak zrobić bezpieczną ścieżkę dołączania w Ruby?

189

Środowisko programistyczne My Rails oparte jest na systemie Windows, a moje środowisko produkcyjne oparte jest na systemie Linux.

Możliwe, że zostanie użyty VirtualHost. Załóżmy, że w /publicfolderze należy podać nazwę jednej nazwy pliku File.open('/tmp/abc.txt', 'r').

—Ale w Windows powinien być C:\tmp\abc.txt. Jak mogę wykonać poprawne połączenie ścieżki, aby obsłużyć dwa różne środowiska?

prefix_tmp_path = '/tmp/'
filename = "/#{rand(10)}.txt"

fullname = prefix_tmp_path + filename # /tmp//1.txt <- but I don't want a double //

A kiedy prefix_tmp_path = "C:\tmp\"dostanęC:\tmp\/1.txt

Jaki jest właściwy sposób obsługi obu przypadków?

Jirapong
źródło

Odpowiedzi:

330

Polecam użycie File.join

>> File.join("path", "to", "join")
=> "path/to/join"
Csexton
źródło
51

Jedną rzecz do zapamiętania. Ruby używa „/” do separatora plików na wszystkich platformach, w tym Windows, więc tak naprawdę nie potrzebujesz używać innego kodu do łączenia rzeczy na różnych platformach. „C: /tmp/1.text” powinno działać poprawnie.

File.join () to twój przyjaciel do łączenia ścieżek.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
Daniel Von Fange
źródło