Comment faire un chemin d'accès sécurisé en ruby?


189

Mon environnement de développement Rails est basé sur Windows et mon environnement de production est basé sur Linux.

Il est possible que VirtualHost soit utilisé. Supposons qu'un nom de fichier doit être référencé dans le /publicdossier avec File.open('/tmp/abc.txt', 'r').

- mais sous Windows, cela devrait l'être C:\tmp\abc.txt. Comment puis-je effectuer une jointure de chemin correcte pour gérer les deux environnements différents?

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

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

Et quand prefix_tmp_path = "C:\tmp\"je reçoisC:\tmp\/1.txt

Quelle est la bonne façon de traiter les deux cas?

Réponses:


330

Je recommande d'utiliser File.join

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

51

Une chose à noter. Ruby utilise un "/" pour séparateur de fichiers sur toutes les plates-formes, y compris Windows, vous n'avez donc pas besoin d'utiliser un code différent pour joindre des éléments sur différentes plates-formes. "C: /tmp/1.text" devrait fonctionner correctement.

File.join () est votre ami pour joindre des chemins ensemble.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.