Rails como executar a tarefa rake


93

Como executo este arquivo rake no terminal / console?

meu statistik.rake em 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

Respostas:


130

Você pode executar tarefas Rake em seu shell executando:

rake task_name

Para executar a partir do Ruby (por exemplo, no console Rails ou outra tarefa Rake):

Rake::Task['task_name'].invoke

Para executar várias tarefas no mesmo namespace com uma única tarefa, crie a seguinte nova tarefa em seu namespace:

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

1
Como faço para organizar todas as tarefas de uma vez ou preciso alterar o namespace para uma tarefa?
— Rails iniciante em

1
Se você deseja executar todas as tarefas de uma vez, crie tarefa: all => [: a,: b,: c] e execute rake reklamer: all
— Spike Gronim

1
Isso não fazia parte da sua pergunta, mas você teria que fazer uma nova tarefa que chame cada um deles, que existe uma abreviatura para. Veja minha resposta atualizada.
— Andrew Marshall

1
@Andrew Marshall, btw, você pode usar task :runall => Rake::Task.tasksse quiser executar todas as tarefas. Mas esta linha deve ser declarada após todas as tarefas.
— Vasiliy Ermolovich

Para onde deve ir a tarefa: runall =>?
— Rails iniciante em

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

ou

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

Esta abordagem funcionará, mas a maneira "correta" de agrupar as tarefas raks foi respondida por @andrew-marshall.
— Tom Harrison de

3
forneça referência se for dizer algo como 'a maneira "correta" ...'. minha resposta foi uma resposta à pergunta original.
— Lucas W

3
Como um teste teórico, tentei executar, Rake::Task['db:seed'].invokemas ele não funciona, dizendo "Não sei como construir a tarefa 'db: seed'"
— lulalala

21

Você já tentou rake reklamer:iqmedier?

Minhas tarefas rake personalizadas estão no diretório lib, não em lib / tasks. Não tenho certeza se isso importa.


1
Eu quero executar todas as tarefas de uma vez
— Rails iniciante

13

Às vezes, suas tarefas rake não são carregadas no console. Nesse caso, você pode tentar os seguintes comandos

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

Essas citações são ruins, mas não posso editá-las porque é uma edição muito pequena!
— nroose de

Mesmo que esta não seja uma resposta real à pergunta feita. É isso que tenho procurado e resolvido meu problema (YourApp :: Application.load_tasks). Obrigado!
— Dennis van de Hoef

3

Se você não tiver certeza de como executar uma tarefa rake, primeiro descubra quais tarefas você tem e também listará os comandos para executar as tarefas.

Execute rake --tasksno terminal.

Ele listará as tarefas como o seguinte:

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

Você pode então executar sua tarefa com: rake gobble:dev:primeconforme listado.


1

No rails 4.2 os métodos acima não funcionaram.

  1. Vá para o Terminal.
  2. Mude o diretório para o local onde seu arquivo rake está presente.
  3. execute rake task_name.
  4. No caso acima, execute rake iqmedier - executará apenas a tarefa iqmedir.
  5. run rake euroads - executará apenas a tarefa euroads.
  6. Para executar todas as tarefas nesse arquivo, atribua o seguinte dentro do mesmo arquivo e execute rake all

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.