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: actualización de SVN y cp de un directorio a otro.¿Cuál es la mejor manera de validar que un comando de terminal se haya ejecutado correctamente en Rails?
Respuesta
Si usa el método Kernel.system(), devolverá un 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 sistemas de rubí comandos here.
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, se podría hacer una verificación de tamaño de archivo en el archivo original que 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
¿Cómo está ejecutando los comandos externos? La función Ruby system()
devuelve true
o false
dependiendo de si el comando se realizó correctamente. Además, $?
contiene un estado de error.
- sólo para ser pedante, no se puede validar un 'comando d
exec
porque reemplaza el programa actual con elexec
'exec
comando d, por lo que el mando nunca volvería a Ruby para su validación. - Para cp, al menos, probablemente sería mejor utilizar el módulo FileUtils (parte de Ruby Standard Library), en lugar de colocarlo en el shell.
- Como se indicó anteriormente, la variable predefinida
$?
le proporcionará el código de retorno del último comando ejecutado porsystem()
o el operador de retroceso.
Sí, el ejecutivo realmente me tiró cuando comencé la programación de ruby. Básicamente, ¡no lo uses! –
- 1. ¿Cuál es la mejor manera de validar datos en mongo?
- 2. Comprobar si un comando se ha ejecutado correctamente
- 3. Cómo comprobar si un comando bash se ha ejecutado correctamente
- 4. ¿Cuál es la forma mejor diseñada que jamás haya visto?
- 5. ¿Cuál es la mejor manera de usar los scripts R en la línea de comandos (terminal)?
- 6. ¿Cómo puedo ejecutar un comando solo después de que otros comandos se hayan ejecutado correctamente?
- 7. En Rails, ¿cuál es la mejor manera de compactar un hash en un resumen anidada
- 8. ¿Cuál es la mejor manera de dibujar en la consola?
- 9. En la terminal de Linux, ¿cuál es el comando que me dirá en qué carpeta estoy?
- 10. ¿Cuál es la mejor manera de obtener un directorio temporal vacío en Ruby on Rails?
- 11. ¿OnClickListener no actualiza la UI hasta que se haya ejecutado todo el código dentro de Android?
- 12. ¿Cuál es la mejor manera de usar SOAP con Ruby?
- 13. ¿Cuál es la mejor manera de solo permitir que se incluya un archivo PHP?
- 14. ¿Cuál es la mejor manera de truncar una URL para que se ajuste a un diseño
- 15. Compruebe que el registro se haya insertado correctamente en Symfony2
- 16. ¿Cuál es la mejor manera de barajar un NSMutableArray?
- 17. ¿Cuál es la mejor manera de implementar un "temporizador"?
- 18. ¿La mejor manera de validar la entrada de moneda?
- 19. ¿Cuál es la mejor manera de probar un procedimiento almacenado?
- 20. ¿Cuál es la mejor manera para que un programador se acerque a aprender un nuevo idioma?
- 21. ¿Cuál es la mejor manera de determinar un bucle invariante?
- 22. ¿Cuál es la mejor manera de mostrar HTML en Flex?
- 23. ¿Cuál es la mejor manera de hacer conexiones de base de datos por usuario en Rails
- 24. ¿Cuál es la mejor manera de implementar el estilo de Gmail "deshacer" en Rails?
- 25. ¿Cuál es la mejor manera de inicializar un frijol?
- 26. Cuál es la mejor manera de aprender WebGL
- 27. ¿Cuál es la mejor manera de mostrar un indicador de 'carga' en un control de WPF
- 28. ¿Cuál es la mejor manera de atrapar una excepción IllegalArgumentException
- 29. ¿Cuál es la mejor manera de probar un RedirectToAction?
- 30. ¿Cuál es la mejor manera de implementar protocolos?
¿Qué pasa si el repositorio de subversión no se modificó? Tu código indicará falla. ¿Qué ocurre si el contenido del archivo ha cambiado pero no el número de bloques asignados (y la operación de copia ha fallado)? Tu código indicaría éxito. –