2009-02-28 14 views
134

El entorno de desarrollo My Rails está basado en Windows, y mi entorno de producción está basado en Linux.¿Cómo hacer una ruta de acceso segura en Ruby?

Es posible que se use VirtualHost. Suponga que se debe hacer referencia a un nombre de archivo en la carpeta /public con File.open('/tmp/abc.txt', 'r').

-pero en Windows debería ser C:\tmp\abc.txt. ¿Cómo puedo hacer una ruta de acceso correcta para manejar los dos entornos diferentes?

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

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

Y cuando me sale prefix_tmp_path = "C:\tmp\"C:\tmp\/1.txt

¿Cuál es la forma correcta de manejar ambos casos?

Respuesta

258

recomiendo el uso de File.join

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

Una cosa a destacar. Ruby usa un "/" para el separador de archivos en todas las plataformas, incluido Windows, por lo que no es necesario utilizar un código diferente para unir cosas en diferentes plataformas. "C: /tmp/1.text" debería funcionar bien.

File.join() es su amigo para unir caminos juntos.

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