Railsでrakeタスクを実行する方法


93

このrakeファイルをターミナル/コンソールで実行するにはどうすればよいですか?

lib / tasksの私のstatistik.rake

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

回答:


130

次のコマンドを実行すると、シェルからRakeタスクを実行できます。

rake task_name

Rubyから実行するには(たとえば、Railsコンソールまたは別のRakeタスクで):

Rake::Task['task_name'].invoke

1つのタスクで同じ名前空間で複数のタスクを実行するには、名前空間に次の新しいタスクを作成します。

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

1
すべてのタスクを一度にすくい取るにはどうすればよいですか、または名前空間をタスクに変更する必要がありますか?
Railsの初心者

1
すべてのタスクを一度に実行する場合は、task:all => [:a、:b、:c]を作成してから、rake reklamer:all
Spike Gronim

1
それはあなたの質問の一部ではありませんでしたが、それぞれを呼び出す新しいタスクを作成する必要があります。私の更新された答えを見てください。
アンドリューマーシャル

1
@Andrew Marshall、ところで、task :runall => Rake::Task.tasksすべてのタスクを実行したい場合に使用できます。ただし、この行はすべてのタスクの後に宣言する必要があります。
Vasiliy Ermolovich

:runall =>タスクはどこに行くべきですか?
Rails初心者

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

または

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

このアプローチは機能しますが、rakタスクをバンドルする「正しい」方法は@ andrew-marshallによって回答されました。
Tom Harrison、

3
「正しい」方法のようなことを言う場合は、参考にしてください。私の答えは、元の質問に対する回答でした。
ルークW

3
理論的なテストとして、実行を試みましたRake::Task['db:seed'].invokeが、「タスク 'db:seed'の構築方法がわからない」と実行されませんでした
lulalala

21

試しましたrake reklamer:iqmedierか?

私のカスタムrakeタスクはlib / tasksではなく、libディレクトリーにあります。それが重要かどうかはわかりません。


1
すべてのタスクを一度に実行したい
Rails初心者

13

時々あなたのレーキタスクはコンソールに読み込まれません、その場合は次のコマンドを試すことができます

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

それらの引用は悪いですが、編集が小さすぎるため編集できません!
18年

これは尋ねられた質問に対する実際の答えではありませんが。これは私が探していて私の問題を解決したものです(YourApp :: Application.load_tasks)。ありがとう!
Dennis van de Hoef

3

rakeタスクを実行する方法がわからない場合は、まず最初に自分が持っているタスクを調べてください。タスクを実行するためのコマンドも一覧表示されます。

rake --tasksターミナルで実行します。

次のようなタスクが一覧表示されます。

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

次にrake gobble:dev:prime、リストされているとおりにタスクを実行できます。


1

Rails 4.2では、上記の方法は機能しませんでした。

  1. ターミナルに行きます。
  2. ディレクトリーを、rakeファイルが存在する場所に変更します。
  3. rake task_nameを実行します。
  4. 上記の場合、rake iqmedierを実行します-iqmedirタスクのみを実行します。
  5. rake euroadsを実行-euroadsタスクのみを実行します。
  6. そのファイル内のすべてのタスクを実行するには、同じファイル内に次のコードを割り当て、rake allを実行します

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.