レーキタスクのソースファイルを見つけるにはどうすればよいですか?
-
06-07-2019 - |
質問
次のように入力すると、考えられるすべてのレーキタスクを表示できることがわかります
rake -T
しかし、タスクが正確に何をするのかを知る必要があります。出力から、実際にタスクを含むソースファイルを見つけるにはどうすればよいですか?たとえば、db:schema:dumpタスクのソースを見つけようとしています。
解決
他の人が言ったことにも関わらず、Railsアプリケーションでrakeタスクのソース位置をプログラムで取得することができます 。これを行うには、コードまたはコンソールから次のようなものを実行します。
# 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
更新:以下のMagneの回答をご覧ください。 rake> = 0.9.0 のバージョンでは、 rake -W
を使用して、rakeタスクのソースの場所を表示できます。
他のヒント
これは古い質問ですが、いずれにせよ:
rake -W
これは、rake 0.9.0で導入されました。
http://rake.rubyforge.org/doc/release_notes/rake- 0_9_0_rdoc.html
タスクが定義されている場所を示すための– where(-W)フラグのサポート。
残念ながらこれを行うプログラム的な方法はありません。 Rakeタスクは、rails自体、lib / tasks、またはtasksディレクトリを持つプラグインからロードできます。
これは、Rails自体ではないほとんどすべてのものを取り込む必要があります。
find . -name "*.rake" | xargs grep "whatever"
db:schema:dump
の場合、ソースは次のとおりです。
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
これは、rails 2.2.2 gemのlib / tasks / database.rakeの242行目にあります。別のバージョンのRailsがある場合は、" namespace:schema
"を検索してください。
おそらく実際には ActiveRecord :: SchemaDumper
のソースが必要ですが、それがどこにあるかを理解するのに問題はないと思います。 :-)
Railsのほとんどのrakeタスクについては、lib / tasksのRails gemディレクトリを参照してください。
Railsをアプリのディレクトリ構造にベンダー化した場合は、代わりにvendor / rails / railties / lib / tasksを調べてください
いずれにしても、db:schema:dumpはdatabases.rakeにあります。