は、私はあなたが レーキタスクのソースファイルを見つけるにはどうすればよいですか?
rake -T
を入力して、すべての可能なすくいタスクを表示することができます知っている。しかし、私は正確にタスクが何を知っている必要があります。出力から、実際にタスクを持つソースファイルを見つけるにはどうすればよいですか?たとえば、私はdb:schema:dumpタスクのソースを見つけようとしています。
は、私はあなたが レーキタスクのソースファイルを見つけるにはどうすればよいですか?
rake -T
を入力して、すべての可能なすくいタスクを表示することができます知っている。しかし、私は正確にタスクが何を知っている必要があります。出力から、実際にタスクを持つソースファイルを見つけるにはどうすればよいですか?たとえば、私はdb:schema:dumpタスクのソースを見つけようとしています。
他の人の言われたことにもかかわらず、は、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
を使用してレーキタスクのソースの場所を表示できます。
Railsのほとんどのレーキタスクについては、Rails gemディレクトリのlib/tasksを参照してください。
あなたは、ベンダー/レール/ railties/libに/タスクに代わり
いずれかの方法を見てあなたのアプリケーションのディレクトリ構造にレールをvendoredした場合、デシベル:スキーマ:ダンプがdatabases.rakeです。
これを行うプログラム的な方法はありますか?私はファイル検索で検索をやりました。 – Tilendor
残念なことに、これを行うプログラム的な方法はありません。レイクタスクは、レール自体、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
のソースがほしいと思うかもしれませんが、どこにあるのかわからないと思います。 :-)
私は、これは古い質問ですけど、どのような場合には:
rake -W
これはレーキ0.9.0で導入されました。
http://rake.rubyforge.org/doc/release_notes/rake-0_9_0_rdoc.html
タスクが定義されている場所を示すため-where(-W)フラグのサポート。
これを更新していただきありがとうございます。常に最新の回答を得ることができます。 –
ありがとうございます。甘い! :) – flagman
これは受け入れられた答えでなければなりません! –
かなり素晴らしい。 – Tilendor
FYI:この方法を使用する前にレーキがロードされていることを確認する必要があります。そうでない場合は、単に「要求する」レーキを行います。 –
多くの義務づけられた、親切なサー! – mrstif