web-dev-qa-db-ja.com

rakeタスクはどこで定義されていますか?

新しく作成されたRailsプロジェクト(Rails someNameで生成))では、次のような 'デフォルト'のrakeタスクを実行できます。

  • rake test
  • rake db:migrate

質問は、これらのタスクはどこで説明されますか?デフォルトのRakefileには、これらすべてのタスクがありません。

さらに、rspecを使用するプロジェクトをチェックアウトし、rake specを実行してすべてのテストを実行できます。 specターゲットはどこで定義されていますか?

64
ryanprayogo

Rakeタスクは、フォルダー構造から自動的にロードされますlib/tasks/*.rake

たとえば、タスクdb:migrateについて話している場合、タスクはRails gem in lib/tasks/databases.rake

そのため、特定のプロジェクトでは、プロジェクトフォルダー構造内のタスクと、指定されたgem内のすべてのタスクが常にあります。

48
DanneManne

説明で定義されている場合、rake -Wはあなたの友達です。例:

$ rake -W db:create

=>

rake db:create  /path/to/Ruby/gems/1.9.1/gems/activerecord-3.1.11/lib/active_record/railties/databases.rake:39:in `block in <top (required)>'

今日これを見つけました:)

105
Adam Groves

タスクが定義および/または変更されている特定のファイルと行番号を見つけるには、次を実行します。

Railsコンソールを開始:

Rails c

次に、これらのコマンドを実行します。

require 'rake'
Rake::TaskManager.record_task_metadata=true
Rake.application.load_rakefile
tsk = Rake.application.tasks.find {|t| t.name =='my_task_name'}
tsk.locations

Rakeは基本的に内部的にロケーションを追跡でき、リクエストに応じてそれらを表示する気の利いたメソッドを持っています。上記のコードは基本的にrakeをロードし、ファイルの場所を追跡するようにRakeに指示し、Rakefile(および他のすべての含まれるファイル)をロードし、問題のタスクを見つけ、その場所メソッドを呼び出します。

同じコメントから、rake v 10.1.0およびrakeの古いバージョンの場合は、tsk.locationsではなくtsk.actionsを呼び出す必要があります。

19
jpgeek

使用しているRails=のバージョンを指定しませんでしたが、3.0.7ではdbタスクはActiveRecord gemにあります

lib/active_record/railties/databases.rake

更新:

Railsバージョン3.2.7の時点で、タスクは上記のとおりです。

5
mraaroncruz

すべてのタスクをリストするには:

rake -P

多くのタスクはgemに由来するため、インストールするタスクを把握するのは困難です...

2
luigi7up

Rails 3でrailties gemは多くのrakeタスクを定義します。

railties-3.2.5/lib/Rails/tasks/annotations.rake
railties-3.2.5/lib/Rails/tasks/documentation.rake
railties-3.2.5/lib/Rails/tasks/engine.rake
railties-3.2.5/lib/Rails/tasks/framework.rake
railties-3.2.5/lib/Rails/tasks/log.rake
railties-3.2.5/lib/Rails/tasks/middleware.rake
railties-3.2.5/lib/Rails/tasks/misc.rake
railties-3.2.5/lib/Rails/tasks/routes.rake
railties-3.2.5/lib/Rails/tasks/statistics.rake
railties-3.2.5/lib/Rails/tasks/tmp.rake
railties-3.2.5/lib/Rails/test_unit/testing.rake

もしあなたの $EDITORが設定されている場合、open_gem gem:

gem install open_gem
gem open railties
2
AlexChaffee

チェックアウトしたプロジェクトは、おそらくrspec-Railsgemを使用しています。そのgemはspecタスクを定義します。以下のソースコードを見ることができます:

https://github.com/rspec/rspec-Rails/blob/master/lib/rspec/Rails/tasks/rspec.rake

1
David Grayson