O seguinte falha com Errno::ENOENT: No such file or directory
, mesmo se o arquivo existir:
open('~/some_file')
No entanto, posso fazer isso:
open(File.expand_path('~/some_file'))
Eu tenho duas perguntas:
- Por que não
open
processa o til apontando para o diretório inicial? - Existe uma maneira mais astuta do que
File.expand_path
?
open(ENV['HOME']+'some_file')
File.join(ENV['HOME'], '/some_file')
para que funcione em ambos os casos.Não tenho certeza se isso estava disponível antes do Ruby 1.9.3, mas acho que a solução mais elegante é usar o
Dir.home
que faz parte do núcleo.fonte
Em vez de confiar que a
$HOME
variável de ambiente está definida corretamente, o que pode ser um incômodo quando você usa computadores de rede compartilhada para desenvolvimento, você pode obter isso de Ruby usando:Acredito que isso identifica o usuário conectado no momento e obtém seu diretório inicial, em vez de depender da
$HOME
variável de ambiente global que está sendo definida. Esta é uma solução alternativa para o que foi dito acima.fonte
Eu descobri o problema do til e um patch foi criado para adicionar
absolute_path
que trata o til como um caractere comum.Da documentação do arquivo:
fonte