Was ist der beste Weg, um einen Terminal-Befehls zur Validierung erfolgreich in Rails laufen?
-
05-07-2019 - |
Frage
Ich schreibe eine schnelle Rails-Anwendung und frage mich, wie ich den Erfolg eines exec'd Befehl bestätigen kann. Die beiden Befehle, die ich renne und SVN-Update und ein cp von einem Verzeichnis in ein anderes.
Lösung
Wenn Sie die Kernel.system () Verfahren es wird eine boolean zurückgeben, den Erfolg des Befehls angibt.
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
Es ist ein guter Vergleich verschiedenen Rubin Systembefehle
Andere Tipps
Wie ausführen Sie die externen Befehle? Die Funktion Rubin system()
gibt true
oder false
je nachdem, ob der Befehl erfolgreich war. Zusätzlich $?
enthält einen Fehlerstatus.
- Just pedantisch zu sein, können Sie keinen
exec
'd Befehl validieren, weilexec
das aktuelle Programm mit demexec
'd Befehl ersetzt, so würde der Befehl nie für die Validierung nach Ruby zurück. - Für die cp, zumindest, würden Sie wahrscheinlich besser, das FileUtils Modul verwenden (Teil des Ruby-Standard Library), anstatt auf die Schale fallen.
- Wie oben erwähnt, ist das
$?
vordefinierte Variablen, die Ihnen den Return-Code des letzten Kommandos gibt durchsystem()
oder den Backtick-Operator ausgeführt werden.
Für SVN-Update, überprüfen Sie die Versionsnummer vor und nach dem Update.
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
Für die cp, könnten Sie eine Dateigröße Überprüfung der Original-Datei tun, die gleich die kopierten Datei.
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