Comment puis-je exécuter Râteau tâches au sein d'un script Ruby?
J'ai un Rakefile
avec une tâche Rake que je l'aurais fait normalement appel à partir de la ligne de commande:
rake blog:post Title
Je voudrais écrire un script Ruby qui appelle cette tâche Rake plusieurs fois, mais la seule solution que je vois est que les bombardements de l'aide ` (backticks) ou system
.
Quelle est la bonne façon de le faire?
Vous devez vous connecter pour publier un commentaire.
de timocracy.com:
#dup
, puis#reopen
à unTempfile
qui est lu après la réouverture de l'original. Simplement l'attribution$stdout
ne fonctionnera pas si la tâche utilise leSTDOUT
constante, ou exécute un programme externe.rake_require
toujours rejoint le chemin d'accès donné avec chaque chemin de la$LOAD_PATH
tableau et vérifie l'existence d'un fichier. Si le premier argument doit être un chemin d'accès relatif. Il sera considéré comme relatif, même si elle contient un slash (ou barre oblique inverse sur des systèmes non-Unix).Cela fonctionne avec le Râteau version 10.0.3:
Comme knut dit, l'utilisation des
reenable
si vous souhaitez appeler plusieurs fois.app.add_import "#{Gem::Specification.find_by_name('statesman').gem_dir}/lib/tasks/statesman.rake"
Vous pouvez utiliser
invoke
etreenable
pour exécuter la tâche en une seconde fois.Votre appel d'exemple
rake blog:post Title
semble avoir un paramètre. Ce paramètre peut être utilisé comme paramètre dansinvoke
:Exemple:
Veuillez remplacer
mytask
avecblog:post
et au lieu de la définition de tâche vous pouvezrequire
votre rakefile.Cette solution permet d'écrire le résultat sur la sortie standard, mais vous ne le mentionne pas, que vous souhaitez supprimer de sortie.
Expérience intéressante:
Vous pouvez appeler la
reenable
également à l'intérieur de la définition de tâche. Cela permet une tâche pour réactiver lui-même.Exemple:
Le résultat (testé avec le râteau 10.4.2):
Dans un script avec des Rails de chargement (par exemple,
rails runner script.rb
)