Rails comment exécuter la tâche de râteau


93

Comment exécuter ce fichier rake dans le terminal / la console?

mon statistik.rake dans lib / tasks

desc "Importer statistikker"
namespace :reklamer do
  task :iqmedier => :environment do
    ...
  end
  task :euroads => :environment do
    ...
  end
  task :mikkelsen => :environment do
    ...
  end
  task :orville => :environment do
    ...
  end
end

Réponses:


130

Vous pouvez exécuter des tâches Rake à partir de votre shell en exécutant:

rake task_name

Pour exécuter à partir de Ruby (par exemple, dans la console Rails ou une autre tâche Rake):

Rake::Task['task_name'].invoke

Pour exécuter plusieurs tâches dans le même espace de noms avec une seule tâche, créez la nouvelle tâche suivante dans votre espace de noms:

task :runall => [:iqmedier, :euroads, :mikkelsen, :orville] do
  # This will run after all those tasks have run
end

1
Comment puis-je ratisser toutes les tâches à la fois ou dois-je changer l'espace de noms en tâche?
Rails débutant le

1
Si vous voulez exécuter toutes les tâches en même temps, faites task: all => [: a,: b,: c] puis exécutez rake reklamer: all
Spike Gronim

1
Cela ne faisait pas partie de votre question, mais vous auriez à faire une nouvelle tâche qui appelle chacun d'eux, pour laquelle il existe un raccourci. Voir ma réponse mise à jour.
Andrew Marshall

1
@Andrew Marshall, btw, vous pouvez utiliser task :runall => Rake::Task.taskssi vous souhaitez exécuter toutes les tâches. Mais cette ligne doit être déclarée après toutes les tâches.
Vasiliy Ermolovich

Où doit aller la tâche: runall =>?
Rails débutant le

25
Rake::Task['reklamer:orville'].invoke

ou

Rake::Task['reklamer:orville'].invoke(args)

Cette approche fonctionnera, mais @ andrew-marshall a répondu à la manière "correcte" de regrouper les tâches des raks.
Tom Harrison

3
veuillez fournir une référence si vous allez dire quelque chose comme "la" bonne "façon ...". ma réponse était une réponse à la question initiale.
Luke W

3
En tant que test théorique, j'ai essayé de courir Rake::Task['db:seed'].invokemais cela ne fonctionne pas, en disant "Je ne sais pas comment construire la tâche 'db: seed'"
lulalala

21

Avez-vous essayé rake reklamer:iqmedier?

Mes tâches de rake personnalisées sont dans le répertoire lib, pas dans lib / tasks. Je ne sais pas si cela compte.


1
Je veux exécuter toutes les tâches en même temps
Rails débutant

13

Parfois, vos tâches de rake ne sont pas chargées dans la console.Dans ce cas, vous pouvez essayer les commandes suivantes

require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke

Ces citations sont mauvaises mais je ne peux pas les modifier car c'est une trop petite modification!
nroose

Même si ce n'est pas une vraie réponse à la question posée. C'est ce que j'ai recherché et j'ai résolu mon problème (YourApp :: Application.load_tasks). Merci!
Dennis van de Hoef

3

Si vous ne savez pas comment exécuter une tâche rake, commencez par découvrir les tâches que vous avez et il répertoriera également les commandes pour exécuter les tâches.

Exécutez rake --taskssur le terminal.

Il listera les tâches comme les suivantes:

rake gobble:dev:prime             
rake gobble:dev:reset_number_of_kits                                    
rake gobble:dev:scrub_prod_data

Vous pouvez ensuite exécuter votre tâche avec: rake gobble:dev:primecomme indiqué.


1

Dans les rails 4.2, les méthodes ci-dessus ne fonctionnaient pas.

  1. Allez au terminal.
  2. Modifiez le répertoire à l'emplacement où votre fichier rake est présent.
  3. exécutez rake nom_tâche.
  4. Dans le cas ci-dessus, exécutez rake iqmedier - exécutera uniquement la tâche iqmedir.
  5. run rake euroads - exécutera uniquement la tâche euroads.
  6. Pour exécuter toutes les tâches de ce fichier, attribuez les éléments suivants dans le même fichier et exécutez rake all

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.