Come fare un percorso sicuro in ruby?


189

L'ambiente di sviluppo My Rails è basato su Windows e il mio ambiente di produzione è basato su Linux.

È possibile che VirtualHost verrà utilizzato. Supponiamo che sia necessario fare riferimento a un nome file nella /publiccartella con File.open('/tmp/abc.txt', 'r').

—Ma in Windows dovrebbe essere C:\tmp\abc.txt. Come posso unire un percorso corretto per gestire i due diversi ambienti?

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

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

E quando prefix_tmp_path = "C:\tmp\"capiscoC:\tmp\/1.txt

Qual è il modo corretto di gestire entrambi i casi?

Risposte:


330

Consiglio di usare File.join

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

51

Una cosa da notare. Ruby utilizza un "/" per il separatore di file su tutte le piattaforme, incluso Windows, quindi non è necessario utilizzare codice diverso per unire le cose su piattaforme diverse. "C: /tmp/1.text" dovrebbe funzionare bene.

File.join () è il tuo amico per unire i percorsi insieme.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.