Qual é a melhor maneira de validar um terminal de comando foi executado com êxito no Rails?
-
05-07-2019 - |
Pergunta
Eu estou escrevendo um app Rails rápida e queria saber como eu pode validar o sucesso de um comando exec'd. Os dois comandos Estou em execução e atualização SVN e um cp de um diretório para outro.
Solução
Se você usar o Kernel.system () método ele irá retornar um booleano que indica o sucesso do comando.
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
Há uma boa comparação de diferentes comandos do sistema ruby ?? aqui .
Outras dicas
Como você está executando os comandos externos? The Ruby função system()
retornos true
ou false
dependendo se o comando foi bem sucedido. Além disso, $?
contém um status de erro.
- Apenas para ser pedante, você não pode validar um comando
exec
'd porqueexec
substitui o programa atual com o comandoexec
'd, então o comando nunca mais voltaria para Ruby para validação. - Para o cp, pelo menos, você provavelmente seria melhor de usar o módulo FileUtils (parte da biblioteca padrão do Ruby), em vez de cair para o shell.
- Como observado acima, a variável
$?
predefinidos lhe dará o código de retorno do último comando a ser executado pelosystem()
ou o operador de crase.
Para atualização SVN, verifique o número da versão antes e depois da atualização.
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 o cp, você poderia fazer uma verificação de tamanho do arquivo no arquivo original sendo igual ao arquivo 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