2009-05-06 22 views
37

は、私はあなたが レーキタスクのソースファイルを見つけるにはどうすればよいですか?

rake -T 

を入力して、すべての可能なすくいタスクを表示することができます知っている。しかし、私は正確にタスクが何を知っている必要があります。出力から、実際にタスクを持つソースファイルを見つけるにはどうすればよいですか?たとえば、私はdb:schema:dumpタスクのソースを見つけようとしています。

答えて

36

他の人の言われたことにもかかわらず、は、railsアプリケーションのレイクタスクのソースの場所をプログラムで取得します。これを行うには、ちょうどあなたのコード内またはコンソールから次のようなものを実行します。

# load all the tasks associated with the rails app 
Rails.application.load_tasks 

# get the source locations of actions called by a task 
task_name = 'db:schema:load' # fully scoped task name 
Rake.application[task_name].actions.map(&:source_location) 

これは、このタスクのために実行されます任意のコードのソース位置を返します。 #source_locationの代わりに#prerequisitesを使用して、前提条件のタスク名のリスト(例:「環境」など)を取得することもできます。

また、使用してロードされたすべてのタスクを一覧表示することができます。

Rake.application.tasks 

UPDATE:以下参照マグネの良い答えを。 の場合、rake> = 0.9.0rake -Wを使用してレーキタスクのソースの場所を表示できます。

+0

かなり素晴らしい。 – Tilendor

+1

FYI:この方法を使用する前にレーキがロードされていることを確認する必要があります。そうでない場合は、単に「要求する」レーキを行います。 –

+0

多くの義務づけられた、親切なサー! – mrstif

0

Railsのほとんどのレーキタスクについては、Rails gemディレクトリのlib/tasksを参照してください。

あなたは、ベンダー/レール/ railties/libに/タスクに代わり

いずれかの方法を見てあなたのアプリケーションのディレクトリ構造にレールをvendoredした場合、デシベル:スキーマ:ダンプがdatabases.rakeです。

+0

これを行うプログラム的な方法はありますか?私はファイル検索で検索をやりました。 – Tilendor

6

残念なことに、これを行うプログラム的な方法はありません。レイクタスクは、レール自体、lib/tasks、またはタスクディレクトリを持つプラグインからロードできます。

これがないのRails自体の中で最もすべてを引き抜きにする必要がありますdb:schema:dumpについては

find . -name "*.rake" | xargs grep "whatever" 

を、ここではソースです:

desc "Create a db/schema.rb file that can be portably used against any DB supported by AR" 
task :dump => :environment do 
    require 'active_record/schema_dumper' 
    File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file| 
    ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file) 
    end 
end 

それはlibに/タスク/データベースのライン242上で見つけることができます。レール2.2.2の宝石。異なるバージョンのRailsをお持ちの場合は、「namespace :schema」と検索してください。

おそらく、実際にはActiveRecord::SchemaDumperのソースがほしいと思うかもしれませんが、どこにあるのかわからないと思います。 :-)

71

私は、これは古い質問ですけど、どのような場合には:

rake -W 

これはレーキ0.9.0で導入されました。

http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html

タスクが定義されている場所を示すため-where(-W)フラグのサポート。

+0

これを更新していただきありがとうございます。常に最新の回答を得ることができます。 –

+0

ありがとうございます。甘い! :) – flagman

+0

これは受け入れられた答えでなければなりません! –

関連する問題