¿Cuál es la mejor manera de validar que un comando de terminal se haya ejecutado correctamente en Rails?

StackOverflow https://stackoverflow.com/questions/171343

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.

¿Fue útil?

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.

  1. Simplemente para ser pedante, no puede validar el comando d de exec 'porque exec reemplaza el programa actual con el exec ' d comando, por lo que el comando nunca regresaría a Ruby para su validación.
  2. 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.
  3. 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top