¿Cómo utilizo "gets" en una tarea de rake?

80

Recibo un error cada vez que intento usar la función que se encuentra dentro de una tarea de rake. ¿Hay alguna forma de hacerlo funcionar?

El error dice "no existe ese archivo o directorio - (nombre de la tarea de rastrillo)"

James A. Rosen
fuente
El mensaje de error parece bastante autoexplicativo ...
Mitch Wheat
6
Puede parecer que sí, pero no lo es. Vea mi respuesta a continuación. Existe bastante confusión sobre la diferencia entre Kernel # gets y STDIN.gets.
James A. Rosen

Respuestas:

158

El problema es que Kernel#gets(que es a lo que está llamando si solo lo usa gets) asume que está extrayendo de un archivo nombrado por los argumentos pasados ​​a Rake. Eso significa que getsintenta devolver el contenido de un archivo llamado [rake-task-here], que es casi seguro que no existe.

Prueba STDIN.gets.

James A. Rosen
fuente
3
Recolección de liendres pequeñas: $stdinprobablemente sea preferible STDINaquí, también vea stackoverflow.com/a/4279689/968531
NobodysNightmare
-4

No creo que deba usar get en una tarea de rake, si necesita obtener una entrada desde la línea de comando, probablemente debería pasarla como un parámetro, pero si publica algún código que no funciona, estoy seguro obtendrá una mejor respuesta.

nitecoder
fuente
21
En general, los argumentos de la línea de comandos son una mejor opción, pero hay muchas buenas razones para usar get en una tarea de rake. La mayoría de ellos tienen que ver con la autenticación o verificación de que realmente desea hacer lo que le dice a rake que haga. ("implementar código de producción")
James A. Rosen