¿Cuál es la mejor manera de validar que un comando de terminal se haya ejecutado correctamente en Rails?
-
05-07-2019 - |
Pregunta
Estoy escribiendo una aplicación rápida de Rails y me preguntaba cómo puedo validar el éxito de un comando ejecutado. Los dos comandos que estoy ejecutando son una actualización de SVN y un cp de un directorio a otro.
Solución
Si utiliza el método Kernel.system () devolverá un valor booleano que indica el éxito del comando.
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
Hay una buena comparación de diferentes comandos del sistema ruby ?? aquí .
Otros consejos
¿Cómo estás ejecutando los comandos externos? La función Ruby system ()
devuelve true
o false
dependiendo de si el comando fue exitoso. Además, $?
contiene un estado de error.
- Simplemente para ser pedante, no puede validar el comando d de
exec
'porqueexec
reemplaza el programa actual con elexec
' d comando, por lo que el comando nunca regresaría a Ruby para su validación. - Para el cp, al menos, probablemente sea mejor que uses el módulo FileUtils (parte de la biblioteca estándar de Ruby), en lugar de caer al shell.
- Como se indicó anteriormente, la variable predefinida
$?
le dará el código de retorno del último comando que ejecutarásystem ()
o el operador de marca invertida.
Para la actualización de SVN, verifique el número de versión antes y después de la actualización.
svn_start_version = IO.popen("svn info").readlines[4]
`svn update`
svn_end_version = IO.popen("svn info").readlines[4]
if svn_end_version > svn_start_version
"success"
end
Para el cp, puede realizar una comprobación del tamaño del archivo, ya que el archivo original es igual al archivo copiado.
source_file_size = IO.popen("du file1").readlines
`cp file1 file2`
dest_file_size = IO.popen("du file2").readlines
if dest_file_size == source_file_size
"success"
end