コンソールからrakeタスクを実行する方法は?


84

コンソールからrakeタスクを呼び出したい。それは実行可能ですか?はいの場合、その方法は?

私はコンソールでこれを試しました:

require 'rake'
Rake::Task['my_task'].invoke

しかし、それは私にこのエラーを与えます:

RuntimeError: Don't know how to build task

レーキがタスクを見つけられないようなものです。

どんな助けでもいただければ幸いです。

ありがとうございました

編集:私はレール2.3.5を使用しています

回答:


188

Rakeタスクを実行するには、次の2つの手順が必要です。

  1. レーキの読み込み
  2. Rakeタスクの読み込み

2番目のステップがありません。

通常、これはRakefileで実行されますが、ここで手動で実行する必要があります。

require 'rake'
Rails.application.load_tasks # <-- MISSING LINE
Rake::Task['my_task'].invoke

2
その他のオプションについては、stackoverflow.com
Jahan

7
あなたは言って違いに注意することが必要かもしれません.invokeし、.executeあなたが(そのような起動に時間がかかりすぎるアプリでのデータ健全性チェッカーなど)タスクを複数回実行する必要がある場合、あなたがしたいと思う、.executeタスクを。
ムーが短すぎる

3
あなたは、引数を渡す必要がある場合は、invokeメソッドでそれを行う:.invoke(arg1, arg2,...)
ヌーノ・シルバ

14

これを行う最も簡単な方法は、irbから%x [コマンド]を実行することです。あなたが何を達成したいのかはわかりませんが。

%x[rake db:migrate]

編集:.invokeダニエルが受け入れられた答えで言うように、私は使用することを強くお勧めします。


1
問題は、rakeが私のタスクを認識していないようだということです。理由は何ですか?
fajarmf 2011

@garnoで完璧に動作します!申し訳ありませんが、1年が経ちましたが、突然同じニーズに直面しています。
fajarmf 2012

2
必要に応じて、バックティックで囲むこともできます。
Sam Soffes 2012年

新しいプロセスを起動してRailsアプリを再度インスタンス化する必要があるため、これは時間がかかります。invokeより良く、より効率的です。
Joshua Pinter

9

簡単な方法は次のとおりです。

Rails.application.load_tasks
Rake::Task['my_task'].invoke

これは簡単な方法であるだけでなく、新しいプロセスを起動してRailsアプリを再度インスタンス化する必要がないことも意味します。簡単かつ迅速!
Joshua Pinter

2

私はを使用しrails 5.x.xていて、同じフォームを実行する必要がありましたrails console
ここにrakeタスクを作成しました-

app/lib/task_to_execute.rake

これが私のために働いたコマンドです-

負荷 Rails.application.load_tasks

Rake::Task['task_to_execute:task_name'].invoke

私のために働いた!


1

経由でRailsコンソールを使用している場合は、次のrails c方法でraketaskメソッドを呼び出して実行できることに注意してください。irb(main):001:0> TaskClassName.new.my_task

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.