Como criar um nome de caminho de junção seguro em ruby?


188

Meu ambiente de desenvolvimento Rails é baseado em Windows e meu ambiente de produção é baseado em Linux.

É possível que o VirtualHost seja usado. Suponha que um nome de arquivo precise ser referenciado na /publicpasta com File.open('/tmp/abc.txt', 'r').

—Mas no Windows deveria ser C:\tmp\abc.txt . Como posso associar um caminho correto para lidar com os dois ambientes diferentes?

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\" eu chegarC:\tmp\/1.txt

Qual é a maneira correta de lidar com os dois casos?

Respostas:


329

Eu recomendo usar o File.join

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

51

Uma coisa a notar. O Ruby usa um "/" para separador de arquivos em todas as plataformas, incluindo Windows, para que você não precise usar um código diferente para juntar as coisas em diferentes plataformas. "C: /tmp/1.text" deve funcionar bem.

File.join () é seu amigo por juntar caminhos.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.