with mails ruby file-io directory cgi

mails - Abrir el archivo desde el directorio en ruby ​​usando File.open



send email with ruby (1)

Soy relativamente nuevo para Ruby, estoy intentando abrir un archivo de la siguiente manera:

#! /usr/bin/env ruby data_file = ''~/path/to/file.txt'' file = File.open(data_file, ''r'')

sin embargo, obtengo "No hay tal archivo o directorio" (el archivo existe en ese directorio). Funciona si pongo esa ruta al archivo como un argumento de línea de comando como:

#! /usr/bin/env ruby file = File.open(ARGV[0], ''r'')

y luego ejecutar desde la línea de comandos como: ruby ​​script.cgi ~ / path / to / file.txt

¿Alguna idea de cómo hacer que funcione de la primera manera?


La ruta no se expande, pero lo hace cuando la ejecuta a través de la línea de comando. Creo en los sistemas Unix, la ruta se expande antes de ejecutar la llamada, lo que significa:

ruby file.rb ~/path/to/file

en realidad se expandió a

ruby file.rb /home/user/path/to/file

Puede validar esto ejecutando lo siguiente en su terminal (o cree un archivo ruby ​​con p ARGV[0] y ejecútelo):

echo "p ARGV[0]" | ruby "" ~/path/to/file #/home/user/path/to/file

Puede usar File.expand_path para cambiar ~ into /home/user

data_file = ''~/path/to/file.txt'' file = File.open(File.expand_path(data_file), ''r'')