J'écris une application Rails rapide et je me demandais comment je peux valider le succès d'une commande exec'd. Les deux commandes que j'exécute sont et mise à jour SVN, et un cp d'un répertoire à l'autre.Quelle est la meilleure façon de valider une commande de terminal a fonctionné avec succès dans Rails?
Répondre
Si vous utilisez la méthode Kernel.system(), elle renvoie un booléen indiquant le succès de la commande.
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
Il y a une bonne comparaison des différentes commandes système rubis here.
Pour la mise à jour SVN, vérifiez le numéro de version avant et après la mise à jour.
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
Pour le cp, vous pouvez faire une vérification de taille de fichier sur le fichier original étant égal au fichier copié.
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
Comment exécutez-vous les commandes externes? La fonction Ruby system()
renvoie true
ou false
selon que la commande a réussi. De plus, $?
contient un état d'erreur.
- Juste pour être pédant, vous ne pouvez pas valider une « commande d parce que
exec
remplace le programme actuel avec leexec
»exec
commande d, de sorte que la commande ne serait jamais revenir à Ruby pour la validation. Pour le cp, au moins, vous feriez probablement mieux d'utiliser le module FileUtils (partie de la Ruby Standard Library), plutôt que de passer au shell. - Comme indiqué ci-dessus, la variable prédéfinie
$?
vous donnera le code de retour de la dernière commande à exécuter parsystem()
ou l'opérateur backtick.
Ouais, exec m'a vraiment jeté quand j'ai commencé à programmer ruby. Fondamentalement, ne l'utilisez pas! –
- 1. Quelle est la meilleure façon de valider plusieurs emails et gérer les erreurs dans Rails?
- 2. Quelle est la meilleure façon de planifier une tâche d'envoi d'e-mails avec Ruby on Rails?
- 3. Dans Ruby, quelle est la meilleure façon d'exécuter une commande Linux locale stockée dans une chaîne?
- 4. Quelle est la meilleure façon de créer une page statique dans Rails?
- 5. Quelle est la meilleure façon de commencer avec NHibernate?
- 6. En Python, quelle est la meilleure façon d'exécuter une commande Linux locale stockée dans une chaîne?
- 7. Quelle est la meilleure façon de gunzip fichiers avec Perl?
- 8. Quelle est la meilleure façon d'appliquer une ombre portée?
- 9. Quelle est la meilleure façon de démarrer avec Open Source?
- 10. Quelle est la meilleure façon de concevoir une base de données pour Ruby on Rails?
- 11. Quelle est la meilleure façon de gérer l'envoi de nombreux courriels dans Rails?
- 12. Quelle est la meilleure façon de dupliquer fork() dans Windows?
- 13. Quelle est la meilleure façon de stocker la configuration spécifique à l'application dans les rails?
- 14. Quelle est la meilleure façon d'effectuer des connexions de base de données par utilisateur dans Rails?
- 15. Quelle est la meilleure façon de formater C# dans WordPress?
- 16. Quelle est la meilleure façon de créer des déploiements ClickOnce
- 17. Quelle est la meilleure façon d'analyser de nombreux arguments de ligne de commande complexes en Java?
- 18. Quelle est la meilleure façon de distribuer les outils de ligne de commande python?
- 19. Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar()?
- 20. Quelle est la meilleure façon d'implémenter les ACL dans une application Rails?
- 21. Quelle est la meilleure façon d'échantillonner/profiler une application PyObjC?
- 22. Quelle est la meilleure façon d'utiliser FDF avec ASP.NET?
- 23. Quelle est la meilleure façon de lire GetResponseStream()?
- 24. Quelle est la meilleure façon d'analyser les flux RSS/Atom avec Rails?
- 25. Quelle est la meilleure façon de lire le secret de session Rails?
- 26. Quelle est une bonne façon de gérer les messages d'erreur et de succès et les codes?
- 27. Quelle est la meilleure façon d'automatiser le remplacement de texte?
- 28. Quelle est la meilleure façon d'implémenter la liaison de données avec une application Web?
- 29. Dans Spree (Rails E-commerce App) quelle est la meilleure façon de limiter les paramètres régionaux?
- 30. Quelle est la meilleure façon de valider un résultat triable JQuery sérialisé dans la base de données?
Que faire si le référentiel subversion n'a pas été modifié? Votre code indiquerait l'échec. Que se passe-t-il si le contenu du fichier a changé mais pas le nombre de blocs alloués (et que l'opération de copie a échoué)? Votre code indiquerait le succès. –