簡體   English   中英

如何找到rake任務的源文件?

[英]How do I find the source file for a rake task?

我知道您可以通過鍵入來查看所有可能的rake任務

rake -T

但我需要知道一項任務到底是做什么的。 從輸出中,我如何找到實際具有任務的源文件? 例如,我正在嘗試查找db:schema:dump任務的源代碼。

我知道這是一個老問題,但無論如何:

rake -W

這是在rake 0.9.0中引入的。

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

支持-where(-W)標志,用於顯示定義任務的位置。

盡管其他人已經說過,您可以通過編程方式在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)

這將返回為此任務執行的任何代碼的源位置。 您還可以使用#prerequisites而不是#source_location來獲取必備任務名稱列表(例如“環境”等)。

您還可以列出使用以下加載的所有任務:

Rake.application.tasks

更新:請參閱下面的Magne的好答案。 對於rake> = 0.9.0的版本,您可以使用rake -W來顯示rake任務的源位置。

不幸的是,沒有程序化的方法來做到這一點。 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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM