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
Rails iniciante
fonte

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
Andrew Marshall
fonte
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)
Luke W
fonte
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.

CharlieMezak
fonte
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
Bloomberg
fonte
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.

Kaká Ruto
fonte
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
hari
fonte