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

StackOverflow https://stackoverflow.com/questions/830423

  •  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にあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top