Cercando di capire l'approccio migliore per un grande progetto. Quando è opportuno aggiungere ricette all'interno di una ricetta utilizzando include_recipe
anziché aggiungere la ricetta allo run_list
? C'è una buona regola empirica?Devo usare include_recipe o aggiungere la ricetta a run_list?
risposta
Come ho visto, qualsiasi ricetta dovrebbe essere in grado di funzionare su una macchina vuota da sola. Quindi se qualche ricetta A dipende dalla ricetta B eseguita prima, io uso sempre include_recipe.
Ad esempio: 2 libri di cucina, tomcat e java. Tomcat richiede java.
Quando un utente desidera installare Tomcat, potrebbe non avere idea di richiedere effettivamente un altro libro di cucina per installarlo. Esegue la ricetta del tomcat e fallisce con un messaggio di errore del tutto inutile come "No java found" o anche peggio - ci riesce, ma ovviamente l'utente non può avviare tomcat, perché non ha java installato.
Ma quando c'è una linea
include_recipe 'java'
nel libro di cucina Tomcat, che richiede anche una lineadepends 'java'
nei metadati, l'utente quando si tenta di installare Tomcat, vedrà il messaggio di errore comprensibile: "il libro di cucina Java non trovato". In questo modo l'utente può scaricare le dipendenze da solo (o anche con uno strumento automatico) senza eseguire effettivamente le ricette, ma leggendo i metadati.
Tutta la logica deve essere controllata con le liste di corsa. I libri di cucina, per quanto provengano, non sono riutilizzabili come le persone vorrebbero pensare. Tutto ciò che fa include_recipe
è aggiungere un altro posto dove gli utenti devono cercare di capire che cosa farà la lista di corsa, quindi renderla esplicita e metterla nella lista di esecuzione.
Suppongo che si dovrebbe usare 'include_recipe' per rendere esplicita una dipendenza. – user1071847
- 1. La ricetta di apt non verrà installata nella mia ricetta
- 2. Devo usare MapView o MapFragment
- 3. Devo usare la forcella o i fili?
- 4. Devo usare Pickle o cPickle?
- 5. Devo usare Point.x o Point.getX()?
- 6. Devo usare em o px?
- 7. Devo usare rand() o rand_s()?
- 8. Devo usare nav o ul
- 9. Devo usare typeclass o no?
- 10. Devo usare @EJB o @Inject
- 11. Devo usare Angular.copy() o _.clone()?
- 12. Devo usare Meteor.startup() o $ (function() {})
- 13. Devo usare un ascoltatore o un osservatore?
- 14. Devo usare alias o alias_method?
- 15. Devo usare System.out.println() o qualcos'altro?
- 16. Devo usare belongsTo o hasOne in Laravel?
- 17. Devo usare la funzione php mail o phpmailer?
- 18. Devo usare QCoreApplication :: processEvents() o QApplication :: processEvents()?
- 19. Devo usare JDK a 32 o 64 bit?
- 20. Devo aggiungere componenti a un JFrame o al suo contentPane?
- 21. Devo usare l'inizializzatore statico o la super classe
- 22. Devo usare ipairs o un ciclo for
- 23. Devo usare window.navigate o document.location in JavaScript?
- 24. Devo usare un data.frame o una matrice?
- 25. Devo usare PendingIntent.getService() o getBroadcast con AlarmManager?
- 26. Cosa devo usare Sospensione o Timer
- 27. Devo usare un LINQ DataContext o molti?
- 28. Devo usare window.load o document.ready jquery
- 29. Devo usare string.isEmpty() o "" .equals (stringa)?
- 30. Devo usare il prototipo o no?
Quanto è intelligente lo Chef per evitare la ripetizione di ricette? Quindi se il tuo libro di cucina dipende da 'parent', tu' includi parent_recipe' e qualche anima inconsapevole aggiunge 'parent' alla lista di esecuzione,' genitore :: default.rb' viene eseguito due volte? Se 'parent' è stato [creato correttamente] (http://docs.opscode.com/chef_why.html#idempotence), non accadrà nulla di brutto sulla macchina, ma quanto tempo sprecherà quando avvii/converge una nuova nodo? Se lo chef non è automagic nell'evitare la duplicazione, esiste un metodo consigliato per evitarlo manualmente? –
Non carica la stessa ricetta più volte. Lo salta, se lo ha già visto. –
Suppongo che sia un vantaggio di idempotence: se si è certi di avere lo stesso risultato indipendentemente da quante volte lo si esegue, allora si sa che è possibile saltare se è già stato eseguito! Grazie Draco. –