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.