2009-02-28 5 views
134

Moje środowisko programistyczne Rails jest oparte na systemie Windows, a moje środowisko produkcyjne jest oparte na systemie Linux.Jak wykonać bezpieczne dołączanie nazwy ścieżki do ruby?

Możliwe, że zostanie użyty VirtualHost. Załóżmy, że jedna nazwa pliku musi mieć odniesienie w folderze /public z File.open('/tmp/abc.txt', 'r').

- ale w Windows powinien być C:\tmp\abc.txt. Jak mogę zrobić prawidłową ścieżkę, aby poradzić sobie z dwoma różnymi środowiskami?

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\" uzyskać C:\tmp\/1.txt

Co to jest poprawny sposób obsłużyć obu przypadkach?

Odpowiedz

258

polecam korzystania File.join

>> File.join("path", "to", "join") 
=> "path/to/join" 
39

Jedną rzeczą, aby pamiętać. Ruby używa "/" do separatora plików na wszystkich platformach, w tym w systemie Windows, więc w rzeczywistości nie potrzebujesz innego kodu do łączenia różnych rzeczy na różnych platformach. "C: /tmp/1.text" powinno działać poprawnie.

File.join() jest Twoim przyjacielem do łączenia ścieżek razem.

prefix_tmp_path = 'C:/tmp' 
filename = "#{rand(10)}.txt" 
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt 
Powiązane problemy